光速上手k8s(2023)(containerd)(未完待續)

来源:https://www.cnblogs.com/Ctrl-cCtrl-v/archive/2023/01/09/17030193.html
-Advertisement-
Play Games

又過了好久沒寫了,主要是近來狀況也無聊 一、瞭解概念(參考) 概念 Kubernetes 是一個可移植、可擴展的開源平臺,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態,其服務、支持和工具的使用範圍相當廣泛。 Kubernetes 這個 ...


又過了好久沒寫了,主要是近來狀況也無聊

一、瞭解概念(參考

概念

Kubernetes 是一個可移植、可擴展的開源平臺,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態,其服務、支持和工具的使用範圍相當廣泛。

Kubernetes 這個名字源於希臘語,意為“舵手”或“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有八個字元的關係。 Google 在 2014 年開源了 Kubernetes 項目。 Kubernetes 建立在 Google 大規模運行生產工作負載十幾年經驗的基礎上, 結合了社區中最優秀的想法和實踐。

Pod的概念

在K8S中,調度的最小是Pod,一個Pod中可以運行一個或者多個容器。在一個集群中,K8S會為每個Pod都分配一個集群內唯一的IP地址。因為K8S要求底層網路支持集群內的任意節點之間的兩個Pod能夠直接通信。這些容器共用當前Pod的文件系統和網路。而這些容器之所以能夠共用,是因為Pod中有一個叫Pause的根容器,其餘的用戶業務容器都是共用這個根容器的IP和Volume。所以這些容器之間都可以通過localhost進行通信。

二、安裝(參考

kubernetes的國外安裝其實非常簡單,國內安裝的主要問題在於kubernetes部件所需的官方鏡像在 (Google Cloud Container Registry)上,很不幸,這個網站被牆了。

添加key

下載這個,有梯子的話也可以直接 sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - 

沒有梯子的,下載好之後

sudo apt-key add ./apt-key.gpg
sudo apt-get update

添加源

sudo nano /etc/apt/sources.list.d/kubernetes.list

添加 deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main 

安裝

sudo apt-get update
sudo apt install kubelet kubernetes-cni kubeadm docker.io

驗證k8s是否安裝好即可,直接敲kubectl + 回車。

關閉swap

  • 暫時關閉 直接使用命令 sudo swapoff -a ,但是重啟之後會失效。會導致k8s無法正常運行。
  • 永久關閉  sudo vim /etc/fstab 將有swap.img那行註釋掉,保存即可。

三、初始化Master節點

 設置HostName

修改主機名

sudo hostnamectl set-hostname master-node

 

 初始化

方法一(推薦):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

 使用鏡像:

kubeadm init --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --pod-network-cidr=10.244.0.0/16

忽略一些報錯:

sudo kubeadm init --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --pod-network-cidr=10.244.0.0/16  --ignore-preflight-errors=SystemVerification --ignore-preflight-errors=Mem

 

方法二:

首先 kubeadm config images list ,然後新建一個sh文件,內容:

images=(  # 下麵的鏡像應該去除"k8s.gcr.io/"的首碼,版本換成上面獲取到的版本
    #你剛剛獲取的
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
images=(  # 下麵的鏡像應該去除"k8s.gcr.io/"的首碼,版本換成上面獲取到的版本
    kube-apiserver:v1.12.1
    kube-controller-manager:v1.12.1
    kube-scheduler:v1.12.1
    kube-proxy:v1.12.1
    pause:3.1
    etcd:3.2.24
    coredns:1.2.2
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
例子
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

目前最大問題(參考

日誌: "command failed" err="failed to run Kubelet: validate service connection: CRI v1 runtime API is not implemented for endpoint \"> 

似乎與K8s 1.26中的這個變化有關。 解決方案是安裝 containerd 1.6,但是......似乎還沒有 APT 包

通過下載和替換二進位文件手動將 containerd 升級到 1.6 或更高版本

wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz
tar xvf containerd-1.6.12-linux-amd64.tar.gz
systemctl stop containerd
cd bin
cp * /usr/bin/
systemctl start containerd

 

 

其他節點的加入

命令執行完成之後,會列印一個有kubeadm join的命令,需要保存下來。

大概長這樣。

kubeadm join 你的IP地址:6443 --token 你的TOKEN --discovery-token-ca-cert-hash sha256:你的CA證書哈希

token是有時效性的,過期時間一般是86400000毫秒(一天)

 

記億些我遇到的問題

① /var/run/containerd/containerd.sock: connect: no such file or directory\

 

 解決方案 sudo apt install containerd 

如果還不行(來自網路,未測試):

rm -rf /var/lib/containerd
systemctl start containerd
systemctl start docker

 

② /proc/sys/net/bridge/bridge-nf-call- iptables does not exist 

sudo modprobe br_netfilter

 

③ container runtime is not running 

 

 

 安裝一下:

sudo apt install container

如果還不行(來自網路,未測試):

rm -rf /etc/containerd/config.toml
systemctl restart containerd

 

④忽略一些錯誤

例如 [ERROR SystemVerification]: failed to parse kernel config: unable to load kernel module: “configs“ ,一些教程建議忽略,那麼你可以使用 --ignore-preflight-errors=SystemVerification 來忽略這個錯誤

 

⑤ [kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed 

 

檢查docker是否安裝,服務是否啟動。啟動服務 sudo systemctl enable --now docker   sudo systemctl restart kubelet 

目前卡這裡了

 

 

⑥ /etc/kubernetes/manifests/etcd.yaml already exists 

重啟服務即可 sudo kubeadm reset 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C 是編譯型語言。為了讓讀者對編程有大概的瞭解,博主把編寫 C 程式的過程分解成 7 個步驟(見下圖)。註意,這是理想狀態。在實際的使用過程中,尤其是在較大型的項目中,可能要做一些重覆的工作,根據下一個步驟的情況來調整或改進上一個步驟。 ...
  • 2023-01-08 一、在IDEA中創建Maven工程之HelloWord (1)新建一個Maven工程 最後點擊“finish”,完成項目創建 (2)在創建的項目下,選中“maven_demo”,右擊新建“Module”,選中“Maven”,點擊“next”,之後設置模塊名 之後點擊“finis ...
  • 1.拷貝 拷貝實際上其實就是在賦值,比如我們有一個列表L1,定義另一個列表L2引用列表L1,實際上就是在拷貝列表L1的值,由於由於L1列表是可變的數據類型,所以當L1的值變的時候,L2的值也是在跟著變的.那其實就算L1內的是不可變的數據類型,L1的內容變化,L2的內容也一樣會隨之變化的 # # 拷貝 ...
  • 字元串 一、使用方法修改字元串大小寫 1. 方法:變數.tittle():首字母大學顯示字元串中的每個英文單詞 2. 方法:變數.upper():字元串全改為大寫 3. 方法:變數.lower():將字元串全改為小寫 二、合併(拼接)字元串 三、使用製表位或換行來添加空白 製表位:\t 換行符:\n ...
  • 馬上就要過年了,聽說還有人買不到票? 不要慌,今天咱們來用Python做一個自動查票搶票的腳本,24小時搶票,誰搶的過你! 準備工作 環境 Python 3.8 Pycharm 插件 谷歌瀏覽器驅動 模塊 需要安裝的第三方模塊,直接pip安裝即可。 requests # 數據請求模塊 prettyt ...
  • 前言 DNS協議作為著互聯網客戶端-伺服器通信模式得第一關,在當下每天都有成千上億上網記錄產生得當今社會,其重要性自然不可言喻。在國內比較有名得DNS伺服器有電信得114.114.114.114、阿裡雲得223.5.5.5,DNSPod得119.29.29.29,配置一個好的DNS伺服器可以縮短請求 ...
  • 大家好,我是編程樂趣,從7月份開始推薦開源項目,已經推薦了接近100個開源項目了,其中絕大部分是有關.Net的開源項目,也受到大家非常多人的喜歡。 由於公眾號不方便查詢,很多人又想瞭解更多的開源項目,就會經常會後臺咨詢我(回覆不及時),或者在後臺一直通過回覆關鍵字,來獲取鏈接。 確實不是很方便,所以 ...
  • 通過一個簡單示例來進行對比, Vue的ElementUI組件的行內編輯: Blazor的AntDesginBlazor組件的行內編輯: 區別: el-table-column的label屬性相當於Column的Title屬性,這個是沒有區別的 多了一個scope="scope",在ElementUI ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...