kubeadm安装kubernetes v1.24.1
实验环境
两台机器,vms71和vms72
系统:centos7.4
vms71为master,vms72是worker
1.所有节点的基本设置
所有节点设置好/etc/hosts,使它们之间能互相解析。
[root@vms7X ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.71 vms71.rhce.cc vms71
192.168.26.72 vms72.rhce.cc vms72
[root@vms7X ~]#
在所有节点上关闭swap分区。
[root@vms7X ~]# swapoff -a ; sed -i '/fstab/d' /etc/fstab
[root@vms71 ~]#
在所有节点上更新yum源。
[root@vms7X ~]# rm -rf /etc/yum.repos.d/* ; wget ftp://ftp.rhce.cc/k8s/* -P /etc/yum.repos.d/
[root@vms7X ~]# yum clean all
[root@vms7X ~]#
2.安装containerd
在所有机器上安装containerd
[root@vms7X ~]# yum install containerd.io cri-tools -y
[root@vms7X ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
现在vms71上修改配置文件,然后同步到vms72上即可。
先生成配置文件/etc/containerd/config.toml。
[root@vms71 ~]# containerd config default > /etc/containerd/config.toml
使用vim编辑器打开/etc/containerd/config.toml。
第一:搜索mirrors,把
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
改成
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
第二:搜索sandbox,把
sandbox_image = "k8s.gcr.io/pause:3.6"
改为
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
第三:搜索SystemdCgroup,把
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = ""
CriuImagePath = ""
CriuPath = ""
CriuWorkPath = ""
IoGid = 0
IoUid = 0
NoNewKeyring = false
NoPivotRoot = false
Root = ""
ShimCgroup = ""
SystemdCgroup = false
改成
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
保存退出。
同步到vms72
[root@vms71 ~]# scp /etc/containerd/config.toml vms72:/etc/containerd/
root@vms72's password:
config.toml 100% 7155 9.3MB/s 00:00
[root@vms71 ~]#
所有节点重启containerd服务,并设置开机自动启动。
[root@vms7X ~]# systemctl enable containerd ; systemctl restart containerd
3.安装containerd客户端工具nerdctl
到下面的连接下载最新版的nerdctl,本实验时最新版是0.20.0版本的。
https://github.com/containerd/nerdctl/releases
先在vms71上下载,然后同步到vms72即可。
[root@vms71 ~]# tar zxf nerdctl-0.20.0-linux-amd64.tar.gz -C /usr/bin/ nerdctl
[root@vms71 ~]# scp /usr/bin/nerdctl vms72:/usr/bin/
root@vms72's password:
nerdctl 100% 25MB 88.5MB/s 00:00
[root@vms71 ~]#
到下面的地址下载nerdctl所需要的cni插件
https://github.com/containernetworking/plugins/releases
先在vms71上做,然后同步到vms72即可。
[root@vms71 ~]# mkdir -p /opt/cni/bin/
[root@vms71 ~]# tar zxf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
[root@vms71 ~]# scp -r /opt/cni/ vms72:/opt/
修改/etc/profile,在第二行添加如下两行内容
[root@vms71 ~]# head -3 /etc/profile
# /etc/profile
source <(nerdctl completion bash)
export CONTAINERD_NAMESPACE=k8s.io
[root@vms71 ~]#
让设置生效
[root@vms71 ~]# source /etc/profile
[root@vms71 ~]#
4.加载模块及修改参数
在所有节点上加载模块
[root@vms7X ~]# modprobe overlay ; modprobe br_netfilter
在所有机器上执行下面的命令,目的是系统重启时模块能自动加载。
cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
在所有机器上执行下面的命令,目的是实现重启系统后,参数也能继续生效。
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
让上述参数立即生效。
[root@vms7X ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@vms7X ~]#
5.安装kubernetes
查看当前源里有哪些版本
[root@vms71 ~]#yum list --showduplicates kubeadm --disableexcludes=kubernetes
在本试验时最新的版本是v1.24.1,所以本次就安装v1.24.1版本的。
所有节点上安装软件包
[root@vms7X ~]#yum install -y kubelet-1.24.1-0 kubeadm-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes
[root@vms7X ~]#
所有节点上启动kubelet并设置开机自动启动。
[root@vms7X ~]# systemctl enable kubelet --now
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@vms7X ~]#
此时kubelet状态是activating的,不是active的。
[root@vms71 ~]# systemctl is-active kubelet
activating
[root@vms71 ~]#
在master(vms71)上初始化集群
[root@vms71 ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.24.1 --pod-network-cidr=10.244.0.0/16
等待一会之后,在vms71上执行提示的命令。
[root@vms71 ~]# mkdir -p $HOME/.kube
[root@vms71 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@vms71 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@vms71 ~]#
在vms72上加入集群
[root@vms72 ~]# kubeadm join 192.168.26.71:6443 --token a4i68r.sw86o5al1hu9qad0 --discovery-token-ca-cert-hash sha256:387d94aae85fd1a39c538183085c7f7c532fe07cf1e8d242ad2c2b70d43b7270
这条命令在master上执行kubeadm init执行成功时有提示。
在vms71上查看节点状态。
[root@vms71 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms71.rhce.cc NotReady control-plane 10m v1.24.1
vms72.rhce.cc NotReady <none> 7s v1.24.1
[root@vms71 ~]#
6.安装calico
到下面链接下载最新版的calico.yaml。
[root@vms71 ~]# wget https://docs.projectcalico.org/manifests/calico.yaml
修改calico.yaml找到CALICO_IPV4POOL_CIDR按下面修改。
改成
在mvs71(master)上安装calico,不需要在vms72上做什么。
[root@vms71 ~]# kubectl apply -f calico.yaml
[root@vms71 ~]#
在vms71上再次查看节点状态。
[root@vms71 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms71.rhce.cc Ready control-plane 15h v1.24.1
vms72.rhce.cc Ready <none> 15h v1.24.1
[root@vms71 ~]#
7.安装metric server
[root@vms71 ~]# kubectl apply -f components.yaml
[root@vms71 ~]#
[root@vms71 ~]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
vms71.rhce.cc 380m 19% 2254Mi 58%
vms72.rhce.cc 331m 16% 1613Mi 42%
[root@vms71 ~]#