4

CentOS7 / Debian10 使用 kubeadm 安装 Kubernetes (k8s) 1.27.2 (一控制节点+多工作...

 1 year ago
source link: https://maxqiu.com/article/detail/155
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
CentOS7 / Debian10 使用 kubeadm 安装 Kubernetes (k8s) 1.27.2 (一控制节点+多工作节点)

2023/06/15  Linux  Docker  Kubernetes

官方文档:使用 kubeadm 引导集群

  1. 本教程适用于开发或测试环境,因为仅有一个控制节点,生产环境应当有多个控制节点
  2. 下文的命令除特殊说明外,在所有主机上都需要执行
  3. (2023-6-15)仅适用于 Debian 10CentOS 7.9 ,在 Debian 11 / Debian 12 上安装完成后会有问题,暂时未找到原因

下文的机器环境信息如下:

主机名 ip 角色
node1 192.168.220.201 控制节点
node2 192.168.220.202 工作节点
node3 192.168.220.203 工作节点

系统检查与配置

机器唯一性

确保每个节点上 MAC 地址和 product_uuid 的唯一性

  • 使用命令 ip linkifconfig -a 来获取网络接口的 MAC 地址
  • 可以使用 cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验

关闭防火墙

默认情况下, Debian 系统未安装 firewalld 防火墙

  1. systemctl stop firewalld
  2. systemctl disable firewalld

关闭 selinux

CentOS 系统

  1. # 立即
  2. setenforce 0
  3. # 永久
  4. sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

关闭 swap

  1. swapoff -a

编辑配置文件

  1. vim /etc/fstab

/etc/fstabswap 分区这行前加 #

  1. # /dev/mapper/centos-swap swap swap defaults 0 0

设置 hostname

各自节点设置

  1. # node1
  2. hostnamectl set-hostname node1
  3. # node2
  4. hostnamectl set-hostname node2
  5. # node3
  6. hostnamectl set-hostname node3

设置 hosts

  1. cat >> /etc/hosts << EOF
  2. 192.168.220.201 node1
  3. 192.168.220.202 node2
  4. 192.168.220.203 node3
  5. EOF

转发 IPv4 并让 iptables 看到桥接流量

加载系统模块

  1. modprobe overlay
  2. modprobe br_netfilter
  1. cat <<EOF | tee /etc/modules-load.d/k8s.conf
  2. overlay
  3. br_netfilter
  4. EOF

配置 sysctl

写入配置文件永久生效

  1. cat <<EOF | tee /etc/sysctl.d/k8s.conf
  2. net.bridge.bridge-nf-call-iptables = 1
  3. net.bridge.bridge-nf-call-ip6tables = 1
  4. net.ipv4.ip_forward = 1
  5. EOF

保存后执行命令立即生效

  1. sysctl -p

安装 containerd

设置软件源

按照以下教程设置源(仅需要执行到设置存储库并更新缓存,不需要安装 Docker

执行以下命令安装 containerd

  1. # CentOS7
  2. yum install -y containerd.io
  3. # Debian10
  4. apt-get install containerd.io

配置 container

默认的配置文件中禁止了 CRI 集成插件,即 disabled_plugins = ["cri"] ,需要启用 CRI 支持才能在 Kubernetes 集群中使用 containerd

  1. # 方便起见,直接删除该配置文件并重启服务
  2. rm -rf /etc/containerd/config.toml
  3. systemctl enable containerd.service
  4. systemctl restart containerd.service

安装 k8s

CentOS7

二选一即可

  1. # 官方源(需要可以访问外网)
  2. cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
  6. enabled=1
  7. gpgcheck=1
  8. gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  9. exclude=kubelet kubeadm kubectl
  10. EOF
  11. # 阿里源
  12. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  13. [kubernetes]
  14. name=Kubernetes
  15. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  16. enabled=1
  17. gpgcheck=1
  18. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  19. exclude=kubelet kubeadm kubectl
  20. EOF
  1. # 更新缓存
  2. yum makecache fast
  3. # 查看最新的版本
  4. yum list --showduplicates kubeadm --disableexcludes=kubernetes
  5. # 安装指定版本(2023-6-9最新)
  6. yum install -y kubelet-1.27.2-0 kubeadm-1.27.2-0 kubectl-1.27.2-0 --disableexcludes=kubernetes
  7. # 启动
  8. systemctl enable --now kubelet

Debian10

  1. # 官方源(需要可以访问外网)
  2. curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \
  3. gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
  4. # 阿里源
  5. curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | \
  6. gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

二选一即可

  1. # 官方源(需要可以访问外网)
  2. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | \
  3. tee /etc/apt/sources.list.d/kubernetes.list
  4. # 阿里源
  5. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | \
  6. tee /etc/apt/sources.list.d/kubernetes.list
  1. # 更新源
  2. apt-get update
  3. # 查看最新版本
  4. apt-cache madison kubeadm
  5. # 安装最新版本(2023-6-9最新)
  6. apt-get install kubelet=1.27.2-00 kubeadm=1.27.2-00 kubectl=1.27.2-00
  7. # 保持当前版本
  8. apt-mark hold kubelet kubeadm kubectl

部署控制节点

  1. 使用 --image-repository 设置不同的镜像源
    • 官方源: --image-repository=registry.k8s.io
    • 阿里源: --image-repository=registry.aliyuncs.com/google_containers
  2. 使用阿里源时,可能需要先执行以下命令手动拉取部分镜像
    1. ctr -n k8s.io i pull registry.aliyuncs.com/google_containers/pause:3.6
    2. ctr -n k8s.io i tag registry.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6

执行初始化

控制节点上执行以下命令

  1. # 官方源(需要可以访问外网)
  2. kubeadm init \
  3. --apiserver-advertise-address=192.168.220.201 \
  4. --kubernetes-version v1.27.2 \
  5. --pod-network-cidr=10.244.0.0/16 \
  6. --image-repository=registry.k8s.io
  7. # 阿里源
  8. kubeadm init \
  9. --apiserver-advertise-address=192.168.220.201 \
  10. --kubernetes-version v1.27.2 \
  11. --pod-network-cidr=10.244.0.0/16 \
  12. --image-repository=registry.aliyuncs.com/google_containers

初始化之后会显示如下类似内容

  1. Your Kubernetes control-plane has initialized successfully!
  2. To start using your cluster, you need to run the following as a regular user:
  3. mkdir -p $HOME/.kube
  4. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  5. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  6. Alternatively, if you are the root user, you can run:
  7. export KUBECONFIG=/etc/kubernetes/admin.conf
  8. You should now deploy a pod network to the cluster.
  9. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  10. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  11. Then you can join any number of worker nodes by running the following on each as root:
  12. kubeadm join 192.168.220.201:6443 --token g9t71p.wajxnogsklp2l02z \
  13. --discovery-token-ca-cert-hash sha256:b20b3beed6eb847aac5085777e92b2c701a779b4e6e89d625d50c838f6e2cafd

其中 kubeadm join xxxxxx --token xxxxxx \ --discovery-token-ca-cert-hash xxxxxx 需要复制下来,用于从节点加入使用

配置环境变量

继续在控制节点上执行以下命令

  1. echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
  2. source /etc/profile

部署工作节点

工作节点执行以下命令

  1. # 使用阿里源时,需要手动拉取一个镜像
  2. ctr -n k8s.io i pull registry.aliyuncs.com/google_containers/pause:3.6
  3. ctr -n k8s.io i tag registry.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6
  4. # 加入
  5. kubeadm join 192.168.220.101:6443 --token ua6ikc.zpbrhi2lr6hm5t9q \
  6. --discovery-token-ca-cert-hash sha256:5e704218035996479d9b07f7b5fa17da6c647d84c8b9185d8360a477722400da

配置网络插件

控制节点上执行以下命令:

  1. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

控制节点上执行以下命令:

  1. kubectl create deployment nginx --image=nginx
  2. kubectl expose deployment nginx --port=80 --type=NodePort
  3. kubectl get nodes,pod,svc

展示类似于如下信息:

  1. NAME STATUS ROLES AGE VERSION
  2. node/node1 Ready control-plane 16h v1.27.2
  3. node/node2 Ready <none> 16h v1.27.2
  4. node/node3 Ready <none> 16h v1.27.2
  5. NAME READY STATUS RESTARTS AGE
  6. pod/nginx-77b4fdf86c-2s5dt 1/1 Running 1 (149m ago) 16h
  7. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  8. service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16h
  9. service/nginx NodePort 10.106.208.51 <none> 80:31211/TCP 16h

通过访问 ip:31211 (端口是随机的,根据展示信息自行修改)查看页面

如果在执行 kubeadm initkubeadm join 时出错后需要重新执行,则可以执行以下命令初始化

  1. 执行 kubeadm reset 重置 kubeadm 安装的状态
  2. 执行 iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 重置 iptables
  3. 如果重置的是工作节点,则需要在控制节点执行 kubectl delete node <节点名称> 删除被重置的节点

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK