机器配置
master 4vCPU 16Gib
node1 2vCPU 4Gib
node2 2vCPU 4Gib
node3 2vCPU 4Gib
操作系统:centos7.9
版本:
kubernetes 1.29.0
containerd v1.7
通过kubeadm快速安装kubernetes集群
关闭交换分区
swapoff -a
禁用SELinux
setenforce 0
yum换源(阿里云机器已经默认阿里源不需要更换)
# 备份源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载源
cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo # 如果没有wget就用curl
mv /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
# 更新源
yum clean all
yum makecahce
yum upgrade
转发IPv4并让iptables看到桥联流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
# 确认 br_netfilter 和 overlay 模块被加载
lsmod | grep br_netfilter
lsmod | grep overlay
# 确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
安装containerd
# 确认libseccomp版本(runc依赖于libseccomp,libseccomp2.3版本不可用)
# 查看版本 (libseccomp-2.3.1-4.el7.x86_64)
rpm -qa | grep libseccomp
# 删除旧版本
yum remove -y libseccomp
# 下载新版本
wget https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/libseccomp-2.5.1-1.el8.x86_64.rpm
rpm -ivh libseccomp-2.5.1-1.el8.x86_64.rpm
# 查看版本
rpm -qa | grep libseccomp
# 参考:https://devpress.youkuaiyun.com/k8s/66c9a1247648734c1b168432.html
# 下载containerd
wget https://github.com/containerd/containerd/releases/download/v1.7.23/cri-containerd-cni-1.7.23-linux-amd64.tar.gz
# 解压缩
tar xzf cri-containerd-cni-1.7.23-linux-amd64.tar.gz -C /
# 将/usr/local/bin和/usr/local/sbin追加到~/.bashrc文件的PATH环境变量中
export PATH=$PATH:/usr/local/bin:/usr/local/sbin
# 创建&修改配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改pause镜像地址
修改sanbox_image的值:
registry.k8s.io/pause:3.8 -> registry.aliyuncs.com/google_containers/pause:3.9
#使用如下命令修改cgroup驱动
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重新加载配置文件
systemctl daemon-reload
# 配置containerd开机启动并现在启动
systemctl enable --now containerd
# 查看containerd状态
systemctl status containerd
# 若后续修改了config.toml配置需要重启containerd
systemctl restart containerd
# 配置crictl
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF
安装kubeadm、kubelet和kubectl
# 添加阿里软件源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
EOF
# 添加默认源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
# 查看可用的kubernetes版本
yum list available kubelet kubeadm kubectl
# 安装kubelet,kubeadm,kubectl(cluster节点可以不安装kubectl)
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
systemctl status kubelet
初始化Master节点
# 生成init-config文件
kubeadm config print init-defaults > init-config.yaml
# 下载kubernetes相关镜像
# 查看所需的镜像列表
kubeadm config images list
# 下载需要的镜像
kubeadm config images pull
# 初始化master节点
kubeadm init
# 记录join命令
# 为kubectl配置客户端的身份配置文件
# 方法一:
export KUBECONFIG=/etc/kubernetes/admin.conf
# 方法二:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
cluster节点加入集群
# 如果之前初始化master节点没有保存join命令,需要获取join命令
# 方法一:重新创建一个token
kubeadm token create --print-join-command
# 方法二:根据之前的token获取join命令
# 获取token
kubeadm token list
# 获取discovery-token-ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
可能需要的参考资料
- contaierd安装和ctr使用:一文搞定 Containerd 的使用-腾讯云开发者社区-腾讯云 (tencent.com)