部署环境如下:
master节点 192.168.1.20
node节点:192.168.1.21、192.168.1.22
主机环境配置
配置主机名
master主机配置(192.168.1.20)
hostnamectl set-hostname master
node节点配置(192.168.1.21、192。168.1.22)
hostnamectl set-hostname node1 #(192,168,1,21)
hostnamectl set-hostname node2 #(192.168.1.22)
配置主机名解析(主节点 node节点均需要操作)
cat > /etc/hosts << EOF
192.168.1.20 kube-master
192.168.1.21 kube-node1
192.168.1.22 kube-node2
EOF
关闭交换空间swap、防火墙、selinux(主节点 node节点均需要操作)
临时关闭swap
swapoff -a (临时关闭 注意开机后依然会开启交换空间)
修改/etc/fstab文件注释swap永久关闭交换空间
sed -i ‘//dev/mapper/centos-swap/s/^/#/’ /etc/fstab
关闭防火墙
systemctl disable firewalld.service --now
关闭Selinux
临时关闭
getenforce 0 (临时设置)
永久关闭
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
内核调优(主节点 node节点均需要操作)
配置内核调优配置文件
cat > /etc/modules-load.d/ipvs.conf << EOF
#Load IPVS at boot
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF
重启模块
systemctl enable --now systemd-modules-load.service
查看是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
添加内核模块以及配置
cat >> /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
检查您的系统是否已加载必要的内核模块,执行如下
modprobe br_netfilter
运行以下命令以使更改生效
sysctl -p
同步时间(主节点 从节点均需要操作)
yum install ntpdate wget -y
ntpdate pool.ntp.org
安装ipset、ipvsadm (主节点、从节点均需操作)
yum install -y ipset ipvsadm
配置内核参数(主节点、从节点据需操作)
修改配置文件
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
重新加载内核配置:
sysctl --system
各主机部署containerd服务
下载containerd软件包(主节点 从节点据需操作) 这里采用源码安装containerd
主节点下载,然后拷贝到从节点
scp containerd-1.7.0-linux-amd64.tar.gz 192,168.1.21:/root
scp containerd-1.7.0-linux-amd64.tar.gz 192,168.1.22:/root
解压containerd软件包 (主节点 从节点均需操作)
tar -xf containerd-1.7.0-linux-amd64.tar.gz
拷贝执行程序到系统/usr/bin/目录下 (主节点 从节点 均需操作)
cp /root/bin/* /usr/bin/
将containerd设置为systemd管理(主节点 从节点均需操作)
cat > /usr/lib/systemd/system/containerd.service << EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStart=/usr/bin/containerd
Restart=always
StartLimitInterval=0
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
添加containerd配置文件 (主节点 从节点均需配置)
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
#搜索SystemdCgroup将后面的false改为ture
SystemdCgroup = true
#搜索sandbox_image行改为如下配置
sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.8”
#搜索mirrors行改为如下配置
[plugins.“io.containerd.grpc.v1.cri”.registry.mirrors]
[plugins.“io.containerd.grpc.v1.cri”.registry.mirrors.“docker.io”]
endpoint = [“https://cjej3vOn.mirror.alijyuncs.com”]
启动containerd并设置为开机自启动 (主节点 从节点均需操作)
systemctl start containerd
systemctl enable containerd
检查服务是否启动成功
systemctl status containerd
部署runc(所有主机部署,主节点下载,拷贝到从节点)
wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64 -O /usr/bin/runc
拷贝从节点:
scp /usr/bin/runc 192.168.1.21:/usr/bin/runc
scp /usr/bin/runc 192.168.1.22:/usr/bin/runc
部署nerdctl客户端工具:(所有节点部署,主节点操作)
wget https://github.com/containerd/nerdctl/releases/download/v0.18.0/nerdctl-0.18.0-linux-amd64.tar.gz
tar -xf nerdctl-0.18.0-linux-amd64.tar.gz -C /usr/bin/
scp /usr/bin/nerdctl 192.168.1.21:/usr/bin/nerdctl
scp /usr/bin/nerdctl 192.168.1.22:/usr/bin/nerdctl
验证nerdctl客户端工具是否可以使用
nerdctl --version
部署kubernetes
设置镜像源地址 (主节点 从节点均需操作)
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
EOF
加载缓存 (主节点 从节点均需操作)
yum repolist
安装kubeadm kubelet kubectl (主节点 从节点均需操作)
yum -y install kubelet-1.27.1-0.x86_64 kubectl-1.27.1-0.x86_64 kubeadm-1.27.1-0.x86_64
kubelet设置为开机自启动 (主节点 从节点均需操作)
systemctl enable kubelet.service
集群初始化(只在master节点执行)
kubeadm init --control-plane-endpoint=192.168.1.20:6443 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.27.1 --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 --upload-certs
执行完成后 会出现如下的结果:
保存最后一行的内容: (这里只声明需要保存的内容,暂时不执行)
kubeadm join 192.168.1.20:6443 --token ze0zfe.9zhew67l6gxsq7du
–discovery-token-ca-cert-hash sha256:ee5a3f9accf98c76a3a3da1f3c4540c14c9e9ce49a4070de4b832aa8cb3a8f31
拷贝admin文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown (id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
将node节点加入集群: (node所有节点执行操作)
检查node节点上containerd引擎服务(必须启动containerd服务);
systemctl status containerd.service #查看启动
systemctl start containerd #启动containerd服务
将node1节点加入K8S集群;
kubeadm join 192.168.1.20:6443 --token ze0zfe.9zhew67l6gxsq7du
–discovery-token-ca-cert-hash sha256:ee5a3f9accf98c76a3a3da1f3c4540c14c9e9ce49a4070de4b832aa8cb3a8f31
将node2节点加入K8S集群;
kubeadm join 192.168.1.20:6443 --token ze0zfe.9zhew67l6gxsq7du
–discovery-token-ca-cert-hash sha256:ee5a3f9accf98c76a3a3da1f3c4540c14c9e9ce49a4070de4b832aa8cb3a8f31
部署calico网络插件
下载calico插件
wget https://docs.tigera.io/archive/v3.24/manifests/calico.yaml --no-check-certificate
修改calico.yaml文件
vi calico.yaml
#编辑找到CALICO_IPV4POOL_CIDR这一行,将这一行的注释#和#后面空格去掉,下面一行也去掉,将value后面的ip修改为初始化集群pod的ip地址池的网段,也就是集群init初始化–pod-network-cidr=10.244.0.0/16 这个参数配置的ip, 注意去掉注释时候yaml格式
启用calico网络配置
kubectl apply -f calico.yaml
查看calico运行pod状态
kubectl get pod -n kube-system
完全启动成功后状态如下图所示:
节点加入集成功后验证集群状态(Ready状态)
使用nerdctl查看k8s集群的镜像以及运行的容器
当使用nerdctl images 或者nerdctl ps 时候默认是查看不到k8s的镜像以及容器,那么如何实现查看k8s的镜像和运行的容器呢?按照如下操作即可
1、nerdctl查看时加上"-n k8s.io"
查看镜像
nerdctl -n k8s.io images
执行结果如下图
查看启动的容器
nerdctl -n k8s.io ps
执行结果如下图
2、配置环境变量,可以不加"-n k8s.io"可以查看k8s的镜像以及运行的容器
vi /etc/profile
#文件末尾添加如下一行:
export CONTAINERD_NAMESPACE=k8s.io
保存后刷新配置
source /etc/profile
此时查看k8s镜像以及容器执行不需要加上"-n k8s.io",执行如下所示:
nerdctl images
nerdctl ps