kubeadm部署kubernetes 1.22版本


本文介紹一下使用kubeadm安裝K8S集群,並使用docker作為容器運行時的具體安裝步驟。

環境說明

  主機節點

機器角色 IP地址
master  192.168.30.11
node01 192.168.30.12
node02 192.168.30.13

 

 

 

 

 

軟件說明

  軟件版本

軟件  版本
docker  20.10.8
kubeadm  1.22.2
kubelet  1.22.2
kubectl  1.22.2

 

 

 

 

 

環境准備

在所有節點上操作

1. 關閉防火牆

systemctl stop firewalld 
systemctl disable firewalld

  

2. 關閉selinux

setenforce 0                                                      # 臨時關閉 
sed -i 's/enforcing/disabled/g' /etc/selinux/config               # 永久關閉

  

3. 關閉swap

swapoff -a #                         # 臨時關閉 
sed -ir 's/.*swap.*/#&/g' /etc/fstab # 永久關閉

  

4. 設置主機名

每個節點根據自己習慣去命名
hostnamectl set-hostname <hostname>

  

5. 在每個節點添加hosts信息

cat >> /etc/hosts  << EOF
192.168.30.11  k8s-master
192.168.30.12  k8s-node01 
192.168.30.13  k8s-node02
EOF

  

6. 創建k8s.conf文件,配置內核參數,將橋接的IPv4流量傳遞到iptables的鏈 

cat > /etc/sysctl.d/k8s.conf  << EOF 
net.bridge.bridge-nf-call-ip6tables=1 
net.bridge.bridge-nf-call-iptables=1 
EOF
執行 sysctl --system   使得如上添加的配置生效

  

 

7. 時間同步(如果時間已經同步,這一步可以省略)

yum install ntpdate -y 
ntpdate ntpdate cn.pool.ntp.org 

常用的NTP時間服務器 
cn.ntp.org.cn    #中國 
edu.ntp.org.cn   #中國教育網 
ntp1.aliyun.com  #阿里雲 
ntp2.aliyun.com  #阿里雲 
cn.pool.ntp.org  #最常用的國內NTP服務器

  

安裝相關軟件包

(master操作)

yum install conntrack-tools libseccomp libtool-ltdl -y

 

安裝docker/kubeadm/kubelet

(master,node01,node02 均安裝)

kubernetes 默認CRI(容器運行時)為docker,因此先安裝docker 
 

安裝docker

# 安裝相關軟件 
 yum install -y yum-utils device-mapper-persistent-data lvm2 

# 使用阿里雲的源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

# 查看可用版本 
  yum list docker-ce --showduplicates 

# 選擇一個版本進行安裝,這里用 docker-ce-20.10.8-3.el7.x86_64 
  yum install docker-ce-20.10.8-3.el7.x86_64 -y 

# 啟動 docker 
  systemctl start docker 

# 查看狀態 
  systemctl status docker 

# 設置開機啟動 
  systemctl enable docker 

# 查看version信息 
  docker version 

# 設置鏡像源 
vim  /etc/docker/daemon.json

{ 
  "registry-mirrors": [ 
  "https://registry.docker-cn.com", 
  "https://hub-mirror.c.163.com", 
  "https://docker.mirrors.ustc.edu.cn" ],
  "exec-opts": ["native.cgroupdriver=systemd"]  # 修改docker的cgroup為systemd
}

  

  

安裝kubeadm、kubelet、kubectl 

(kubectl是master端的管理工具,node節點可以不用安裝)

#由於官方源國內無法訪問,這里使用阿里雲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=1 
repo_gpgcheck=1 
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF 
#安裝kubeadm、kubelet、kubectl 
由於版本更新頻繁,這里安裝1.22.2版本
yum install -y   kubeadm-1.22.2 
yum install -y   kubelet-1.22.2 
yum install -y   kubectl-1.22.2 

如果安裝時提示公鑰沒有安裝,解決方法:--nogpgcheck 進行跳過公鑰檢查安裝

# 設置kubelet開機啟動(注意:kubelet服務會暫時啟動不了,先不用管它) 
 systemctl enable kubelet

  

  

在master端初始化

kubeadm init \
--apiserver-advertise-address=192.168.30.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16


--apiserver-advertise-address=192.168.30.11 這里填master地址即可

這個時候並不會成功,報錯如下:

 

很明顯,是kubelet沒啟動導致。

 查看/var/log/messages日志,有這樣一條:

failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

這是因為docker的Cgroup是cgroups,kubelet的Cgroups是systemd,兩者的Cgroups不一樣導致。

修改方法如下:

鑒於用的k8s版本更新較快,本文只記錄當前1.22.2的修改方式,其他版本請參詳官方:

# 重置未初始化成功的kubeadm配置
echo y | kubeadm reset

修改docker,只需在/etc/docker/daemon.json中,添加"exec-opts": ["native.cgroupdriver=systemd"]即可

修改后如下:
{ 
  "registry-mirrors": [ 
  "https://registry.docker-cn.com", 
  "https://hub-mirror.c.163.com", 
  "https://docker.mirrors.ustc.edu.cn" ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

修改kubelet:
cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

重啟docker 與 kubelet:

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

  

再次初始化就可以了。然后照着提示在操作就可以了。

安裝網絡

mkdir flannel 
cd flannel 
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube- flannel.yml 
 
# 安裝flannel網絡 
kubectl apply -f kube-flannel.yml 
# 檢查 
kubectl get pods -n kube-system

  

  

 

 

 

 

### 在執行 kubectl get  cs 命令查看健康狀態時,輸出如下信息:

[root@k8s-master ~]# kubectl get  cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused   
controller-manager   Healthy     ok                                                                                            
etcd-0               Healthy     {"health":"true","reason":""}

這是不正常的,解決方法:

cd  /etc/kubernetes/manifests

# 創建備份文件夾bak
mkdir  bak

# 備份kube-scheduler.yaml到bak文件夾下
cp  kube-scheduler.yaml bak

# 修改kube-scheduler.yaml文件
將  --port=0 這一行刪除

# 重啟kubelet
systemctl restart kubelet

 

再次執行kubectl get cs,顯示正常狀態

 


免責聲明!

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



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