架构

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


 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐