架构
1master 1worker 1nfs
k8s部署采用工具kubuadm,官方提供的工具
本文k8s版本为v1.26.1
本文主要包括以下五个步骤:
1.每台机器上安装runtime
docker的安装
2.在每台机器上安装kubeadm,kubelet和kubectl
基本组件安装
3.创建集群
在master节点,创建k8s集群
4.加入子节点
在子节点操作,加入到master的集群中
机器情况
master 192.168.3.75
worker 192.168.3.85
nfs 192.168.3.86 本文暂时不用,后续数据持久化使用 本文安装命令不针对nfs机器
1.安装docker
安装命令
yum install -y https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el8.x86_64.rpm
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
验证
docker version
2.在每台机器上安装kubeadm,kubelet和kubectl
参考官方文档安装
Installing kubeadm | Kubernetes
官方安装脚本
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# Set SELinux in permissive mode (effectively disabling it)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
但是这个repo需要访问google,国内需要改成阿里云
上述命令改成阿里云
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# Set SELinux in permissive mode (effectively disabling it)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
验证
kubelet --version
kubeadm version
kubectl version
3.创建集群
3.1 初始化前工作
禁用 firewalld防火墙,禁用 Swap分区,安装iproute-tc,安装配置cri-dockerd
#停止+禁用防火墙
systemctl stop firewalld
systemctl disable firewalld.service
#禁用swap分区
编辑分区配置文件/etc/fstab,注释掉swap行,重启系统
#安装iproute-tc
yum install iproute-tc -y
#启用cri
在/etc/containerd/config.toml 注释掉disabled_plugins = [“cri”]
systemctl restart containerd
在kubernetes1.24后还需要安装cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.0/cri-dockerd-0.3.0-3.el8.x86_64.rpm
rpm -ivh cri-dockerd-0.3.0-3.el8.x86_64.rpm
修改ExecStart 指向阿里云
sed -i 's,^ExecStart.*,& --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7,' /usr/lib/systemd/system/cri-docker.service
具体内容
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
启动cri-docker
systemctl daemon-reload
systemctl enable --now cri-docker.service
systemctl enable --now cri-docker.socket
3.2 在master节点使用kubeadm init进行初始化
执行命令
kubeadm init --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address=0.0.0.0 --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///var/run/cri-dockerd.sock
如果报错,解决完报错之后执行重置命令后再执行上述命令
kubeadm reset
执行初始化命令后会提示配置集群。
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.3.75:6443 --token 56ik4x.qa4e5tw0fnlem4xp \
--discovery-token-ca-cert-hash sha256:c17810c33a3718116be4c46949aabb2dcac6f52b4b7b4f0971b75b276a0b812c
3.3 配置KUBECONFIG
配置KUBECONFIG 对于root和普通用户有不同的方式
命令如下
#普通用户执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#root用户执行
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
3.4 安装网络组件 仅master机器
官方支持的组件
Installing Addons | Kubernetes
fannel Calico Weave cannal等等
使用人数比较多的是Flannel,这里用Flannel
#下载kube-flannel.yml
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
#早期版本配置了一个国内无法访问的地址(quay.io),需要改为(quay-mirror.qiniu.com)。新版本么有这个问题
#安装kube-flannel.yml
kubectl apply -f kube-flannel.yml
#如果配置了自动以的pod cird(非10.244.0.0/16段),需要先进行配置
#修改kube-flannel.yml里的net-conf.json内容为你定义的网段,默认内容如下
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
如果需要搭建单机版,可以跳过第四节直接看第五节。
4.子节点加入
如果忘记了init命令时的提示信息,执行下面的命令可重新打印加入命令
kubeadm token create --print-join-command
将命令结果复制到子节点执行
kubeadm join 192.168.3.75:6443 --token uhxlqb.7own4fermf8vmirf --discovery-token-ca-cert-hash sha256:c17810c33a3718116be4c46949aabb2dcac6f52b4b7b4f0971b75b276a0b812c
根据提示,可能需要加上
--cri-socket unix:///var/run/cri-dockerd.sock
拷贝master的配置文件
拷贝master机器的admin.conf的配置文件到子节点机器
#子节点机器执行命令
scp root@192.168.3.75:/etc/kubernetes/admin.conf /etc/kubernetes/
#配置文件加入环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
子节点查看所有node命令
kubectl get nodes
返回正常则子节点配置成功
5.单机版搭建改造
主节点执行去除污点命令
#早期版本去除污点
kubectl taint nodes --all node-role.kubernetes.io/master-
#最新版本去除污点
kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
如果指定的污点并不存在,可能会报error: taint "XXX" not found 的错误
将来去除污点后面的污点名可能还会变化,可以根据需要查询将来去除污点后面的污点名可能还会变化,可以根据需要查询
查看主节点的污点名
#获取所有节点 Name列对应节点名
kubectl get nodes
#查询指定节点名对应的污点
kubectl describe nodes [nodeName] |grep Taint