k8s安裝


1. 安裝要求
1.1 服務器節點要求
部署Kubernetes集群機器需要滿足以下幾個條件:

  • 一台或多台機器,操作系統 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多
  • 可以訪問外網,需要拉取鏡像,如果服務器不能上網,需要提前下載鏡像並導入節點
  • 禁止swap分區

1.2對於kubeEdge
KubeEdge由雲和邊緣組成。它建立在Kubernetes之上,為聯網、應用部署和雲與邊緣之間的元數據同步提供核心基礎設施支持。所以如果我們想要設置KubeEdge,我們需要設置Kubernetes集群(可以使用現有的集群),雲端和邊緣端。

在cloud side, 我們需要安裝:

  • Docker,
  • Kubernetes cluster
  • cloudcore

在 edge side, 我們需要安裝:

  • Docker,
  • MQTT (We can also use internal MQTT broker) (配置可以選用,不是一定需要)
  • edgecore

2.准備環境

角色 IP 工作負載
master(雲端) 192.168.16.100 k8s、docker、cloudcore
node(邊緣端) 192.168.16.x docker、edgecore

1) 關閉防火牆:

systemctl stop firewalld

設置開機禁用防火牆:

systemctl disable firewalld

2) 關閉selinux:

臨時禁用:setenforce 0

永久禁用: 

vi /etc/selinux/config    # 或者修改/etc/sysconfig/selinux

SELINUX=disabled

查看:getenforce

3) 關閉swap:(K8S 1.8版本后必須關閉)

臨時關閉:swapoff -a

永久關閉:vi /etc/fstab,注釋掉swap行

# sed -i 's/.*swap.*/#&/' /etc/fstab
#/dev/mapper/centos-swap swap           swap   defaults     0 0

通過free查看swap開關情況:

4)根據規划設置主機名

hostnamectl set-hostname <hostname>

5) 在master添加hosts

cat >> /etc/hosts << EOF 192.168.16.100 master EOF

6) 時區配置和時間同步

查看:date +"%Z %z" 查看當前時區信息

 設置:tzselect根據提示進行設置

時間同步:

yum install ntpdate -y ntpdate

time.windows.com

7)將橋接的IPV4流量傳遞到iptables 的鏈

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

# 生效

[root@master-node kubeedge]# sysctl --system

3.安裝Docker

所有節點安裝Docker

1) 更新yum

yum update

2) 安裝 yum-utils,它提供了 yum-config-manager,可用來管理yum源

yum install -y yum-utils  wget

3)添加yum源

方式一:

sudo yum-config-manager \

--add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 方式二:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

3) 安裝docker

sudo yum install -y docker-ce

yum -y install docker-ce-18.06.1.ce-3.el7

4) 啟動docker

設置開機啟動:systemctl enable docker

立即啟動服務:systemctl start docker

查看docker狀態:

systemctl status docker

 

5)配置/etc/docker/daemon.json

[root@master-node kubeedge]cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"insecure-registries": ["harbor.domain.io"] } EOF [root@master-node kubeedge]systemctl daemon-reload && systemctl restart docker

注:registry-mirrors(國內鏡像倉庫)、insecure-registries(私有鏡像倉庫)

 

4.kubeedge框架部署

master(雲端)節點安裝/kubeadm/kubelet,Kubernetes默認CRI(容器運行時)為Docker,因此先安裝Docker

4.1  K8s安裝

1)添加阿里雲YUM軟件源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2)安裝kubeadm,kubelet和kubectl

 由於版本更新頻繁,這里指定版本號部署:

yum install -y kubelet-1.19.10 kubeadm-1.19.10 kubectl-1.19.10

啟動kubelet並設置開機啟動服務:

#重新加載配置文件
systemctl daemon-reload

#啟動kubelet
systemctl start kubelet

#查看kubelet啟動狀態
systemctl status kubelet
#沒啟動成功,報錯先不管,后面的kubeadm init會拉起

#設置開機自啟動
systemctl enable kubelet

#查看kubelet開機啟動狀態 enabled:開啟, disabled:關閉
systemctl is-enabled kubelet

#查看日志
journalctl -xefu kubelet

  #查看kubelet的日志
  journalctl -xef -u kubelet -n 20

3)部署Kubernetes Master

使用kubeadm init命令進行集群初始化

在192.168.16.100(Master)執行

kubeadm init \
  --apiserver-advertise-address=192.168.16.100 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.19.10 \
  --service-cidr=10.96.0.0/20 \
  --pod-network-cidr=10.244.0.0/16

由於默認拉取鏡像地址k8s.gcr.io國內無法訪問,這里指定阿里雲鏡像倉庫地址

4)使用kubectl工具:

配置kubectl命令執行環境

a.未配置環境前,執行kubectl get nodes指令,會顯示如下結果

 

b.配置kubectl執行環境:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

此時再執行kubectl get nodes會得到如下結果:

 

 問題1:kubeadm resetkubeadm init出現的問題

# kubectl get node
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")`

問題1解決辦法:

I got the same error while running $ kubectl get nodes as a root user. I fixed it by exporting kubelet.conf to environment variable.

設置環境變量

export KUBECONFIG=/etc/kubernetes/kubelet.conf kubectl get nodes

5) 部署CNI網絡插件(flannel)

a.下載kube-flannel.yml

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

若出現以下錯誤:

 

修改hosts文件vi /etc/hosts

# GitHub Start

199.232.28.133  raw.githubusercontent.com

再執行wget命令,可以得到如下結果:

 

b.執行kube-flannel部署操作

kubectl apply -f kube-flannel.yml

或

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

通過命令查看系統pods運行情況,查看kube-flannel是否正常運行

kubectl get pods -n kube-system

 注意:若flannel出現ImagePullBackOff狀態,可嘗試下面方法:

查看kube-flannel.yml內容

cat kube-flannel.yml |grep image|uniq

根據結果,手動拉取flannel的docker鏡像

docker pull quay.io/coreos/flannel:v0.15.1

查看master節點狀態

 

kubeadm reset重置集群

在重置后在Master重復步驟4

#在master節點之外的節點進行操作
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
##重啟kubelet
systemctl restart kubelet
##重啟docker
systemctl restart docker

5.kubeedge cloudcore部署

雲端部署cloudcore

     安裝有兩種方式,一種源碼編譯手動安裝,還有一種是使用kubeedge提供的工具-keadm。手動安裝比較繁瑣,主要是編譯X509經常是個噩夢,有些編譯報錯網上搜索不到解決方案。對於新手而言是一種很大的心智負擔,所以我還是用keadm這個工具去安裝。

但是,這種方式安裝最大的問題就是國內的牆的問題會導致很多某些資源無法下載,比如說 CRD的yaml,cloudcore啟動的service,所以我會結合兩者,采用半手動半工具的安裝方式去幫助大家順利的完成ke的集群搭建
5.1 下載 keadm

wget https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/keadm-v1.7.0-linux-amd64.tar.gz 

下載下來之后執行

tar -zxvf keadm-v1.7.0-linux-amd64.tar.gz # 解壓keadm的tar.gz的包
cd keadm-v1.7.0-linux-amd64/keadm/
cp keadm /usr/sbin/ #將其配置進入環境變量,方便使用

5.2 使用keadm安裝cloudcore

keadm init --advertise-address=192.168.16.100 --kubeedge-version=1.7.0


keadm init --kubeedge-version=1.7.0 --kube-config=$HOME/.kube/config

注意:

–advertise-address=xxx.xx.xx.xx 這里的xxx.xx.xx.xx換成你master機器的ip,可以是內網地址,也可以是公網ip地址,–kubeedge-version=1.7.0 意思是指定安裝的kubeEdge的版本,如果你默認不指定那么keadm會自動去下載最新的版本

5.3 keadm init失敗解決方案

網絡被牆了,特別是在公有雲的虛擬機上,出現這種問題的概率特別大

1)在/etc/hosts下添加如下內容

解決keadm初始化過程中可能無法解析raw.githubusercontent.com的問題

# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End

2)半手動安裝

錯誤一:

devices_v1alpha2_device.yaml(用於設備接入的CRD)下載失敗,

F0608 11:40:15.689702    5530 keadm.go:27] failed to exec 'bash -c cd /etc/kubeedge/crds/devices && wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_device.yaml', err: --2021-06-08 11:39:54--  https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_device.yaml

手動下載

wget https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_device.yaml

mkdir -p /etc/kubeedge/crds/devices && mkdir -p /etc/kubeedge/crds/reliablesyncs

cp devices_v1alpha2_device.yaml /etc/kubeedge/crds/devices/

錯誤二:

devices_v1alpha2_devicemodel.yaml下載失敗,

F0608 14:10:11.700467   42153 keadm.go:27] failed to exec 'bash -c cd /etc/kubeedge/crds/devices && wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_devicemodel.yaml', err: --2021-06-08 14:10:11--  https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_devicemodel.yaml

手動下載

wget https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_devicemodel.yaml

cp devices_v1alpha2_devicemodel.yaml /etc/kubeedge/crds/devices/

錯誤三:

其他xxx..yaml下載失敗

將下載文件放到/etc/kubeedge/crds/里面對應的文件夾

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml#例如,由該網站可知,文件應該共享到reliablesyncs

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/reliablesyncs/objectsync_v1alpha1.yaml

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/router/router_v1_rule.yaml

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/router/router_v1_ruleEndpoint.yaml

錯誤四:

使用keadm安裝cloudcore,關於yaml的配置文件配置完了,現在要配置cloudcore.service,此處提醒文件應該存在/etc/kubeedge里面,不是crds里面

F0608 14:27:07.887553   45073 keadm.go:27] fail to download service file,error:{failed to exec 'bash -c cd /etc/kubeedge/ && sudo -E wget -t 5 -k --no-check-certificate https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/cloudcore.service', err: --2021-06-08 14:27:07--  https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/cloudcore.service

手動下載

下載文件放到/etc/kubeedge

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/cloudcore.service

https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz

5.4 初始化成功

keadm init --advertise-address=192.168.107.138 --kubeedge-version=1.7.0

輸出:

Kubernetes version verification passed, KubeEdge installation will start...
Expected or Default KubeEdge version 1.7.0 is already downloaded and will checksum for it. 
kubeedge-v1.7.0-linux-amd64.tar.gz checksum: 
checksum_kubeedge-v1.7.0-linux-amd64.tar.gz.txt content: 
kubeedge-v1.7.0-linux-amd64.tar.gz in your path checksum failed and do you want to delete this file and try to download again? 
[y/N]: 

此處輸入N,checksum失敗不影響配置,不必擔心。選擇y通過不了。

安裝成功:

 5.5 檢查cloudcore是否啟動

ps -ef|grep cloudcore
未啟動執行:
nohup cloudcore > /var/log/kubeedge/cloudcore.log 2>&1 &

 檢查是否報錯

journalctl -xe

 5.6獲取雲端令牌token

keadm gettoken

 

 獲取的token,在部署edgecore時需要使用

6.edge端的Mosquitto安裝

可選,不安裝也不影響配置

1)添加EPEL軟件庫

yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

下載mosquitto

yum -y install mosquitto

 6.kubeedge edgecore部署(邊緣節點)

具備Docker環境即可安裝

下載keadm

wget https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/keadm-v1.7.0-linux-amd64.tar.gz 

解壓

tar -zxvf keadm-v1.7.0-linux-amd64.tar.gz 

進入目錄

cd keadm-v1.7.0-linux-amd64/keadm

加入cloud

./keadm join --cloudcore-ipport=192.168.16.100:10000 --edgenode-name=node --kubeedge-version=1.7.0 --token=3dc13e89ee6b907f7346786d018d0fa4c1efa7ddb0017607c7512bc1b4926449.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjM5OTg0ODd9.hTQMyupZd5d_e5uOVtz3RVsfe9H_BSFnwuLzPRy2ZUg
上面keadm gettoken里面的返回內容

輸出:

F0608 15:03:13.805669    3177 keadm.go:27] failed to exec 'bash -c cd /etreleases/download/v1.7.0/kubeedge-v1.7.0-linux-F0608 15:05:37.624302    3197 keadm.go:27] failed to exec 'bash -c cd /etc/kubeedge/ && wget -k --no-check-certificate --progress=bar:force https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz', err: --2021-06-08 15:05:37--  https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz
正在解析主機 github.com (github.com)... 13.250.177.223
正在連接 github.com (github.com)|13.250.177.223|:443... 已連接。
無法建立 SSL 連接。
已轉換了 0 個文件,用時 0 秒。
amd64.tar.gz', err: --2021md64.tar.gz
正在解析主機 github.com (github.com)... 13.229.188.59
正在連接 github.com (github.com)|13.229.188.59|:443... 已連接。
無法建立 SSL 連接。
已轉換了 0 個文件,用時 0 秒。

同樣類似於cloudcore,將下面對應文件共享到配置目錄/etc/kubeedge

https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/edgecore.service

檢查edgecore是否安裝成功並啟動:

 ps -ef|grep edgecore

 edgecore啟動失敗定位原因:

journalctl -xe
journalctl -u edgecore.service -f

刪除邊緣結點

# cloud
$ keadm reset # --kube-config=$HOME/.kube/config

# edge
$ keadm reset # 節點 keadm reset 將停止 edgecore ,並且不會卸載/刪除任何先決條件。
# 逐個停止進程,刪除相關文件依賴
rm -rf /var/lib/kubeedge /var/lib/edged /etc/kubeedge
rm -rf /etc/systemd/system/edgecore.service
rm -rf /usr/local/bin/edgecoreps 

7.檢查Edge節點配置是否成功

在Master上驗證是否成功,使用

輸入:

kubectl get nodes

kubectl get nodes -owide

輸出:

如果出現版本中帶有kubeedge的node,則說明部署成功

8、測試 kubernetes 集群
在 Kubernetes 集群中創建一個 pod,驗證是否正常運行:
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc
訪問地址:http://NodeIP:Port


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM