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