专栏首页木二天空017.Kubernetes二进制集群扩容worker

017.Kubernetes二进制集群扩容worker

一 前置准备

1.1 互信配置

为了更方便远程分发文件和执行命令,本实验配置master节点到其它节点的 ssh 信任关系。

  1 [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker03

提示:本步骤操作仅需要在master01节点操作。

1.2 环境变量

后续使用的环境变量都定义在文件 environment.sh 中,同时拷贝到所有节点的 /opt/k8s/bin 目录:

  1 [root@master01 ~]# vi environment.sh		#追加worker03相关信息
  1 #!/bin/sh
  2 #****************************************************************#
  3 # ScriptName: environment.sh
  4 # Author: xhy
  5 # Create Date: 2020-06-27 22:19
  6 # Modify Author: xhy
  7 # Modify Date: 2020-06-27 22:19
  8 # Version: 
  9 #***************************************************************#
 10 # 集群 NODE IP 对应的主机名数组
 11 export NODE_NAMES=(worker01 worker02 worker03)
 12 
 13 # 集群所有机器 IP 数组
 14 export ALL_IPS=(172.24.8.71 172.24.8.72 172.24.8.73 172.24.8.74 172.24.8.75 172.24.8.76)
 15 
 16 # 集群所有IP 对应的主机名数组
 17 export ALL_NAMES=(master01 master02 master03 worker01 worker02 worker03)
  1 [root@master01 ~]# chmod u+x *.sh
  2 [root@master01 ~]# source /root/environment.sh

1.3 分发并执行环境初始化

  1 [root@master01 ~]# scp -rp k8sinit.sh root@worker03:/root/
  2 [root@master01 ~]# scp -rp /etc/hosts root@worker03:/etc/hosts
  3 [root@master01 ~]# ssh root@worker03 "bash /root/k8sinit.sh"

提示:本步骤操作仅需要在master01节点操作。

二 证书分发

2.1 分发证书

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03  "mkdir -p /etc/kubernetes/cert"
  3 [root@master01 work]# scp ca*.pem ca-config.json root@worker03:/etc/kubernetes/cert

提示:本步骤操作仅需要在master01节点操作。

三 部署docker

3.1 安装和部署Docker

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp docker/*  root@worker03:/opt/k8s/bin/
  3 [root@master01 work]# ssh root@worker03 "chmod +x /opt/k8s/bin/*"

提示:本步骤操作仅需要在master01节点操作。

3.2 分发Docker system

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "echo '/sbin/iptables -P FORWARD ACCEPT' >> /etc/rc.local"
  3 [root@master01 work]# sed -i -e "s|##DOCKER_DIR##|${DOCKER_DIR}|" docker.service
  4 [root@master01 work]# scp docker.service root@worker03:/etc/systemd/system/

提示:本步骤操作仅需要在master01节点操作。

3.3 分发Docker配置文件

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "mkdir -p /etc/docker/ ${DOCKER_DIR}/{data,exec}"
  3 [root@master01 work]# scp docker-daemon.json root@worker03:/etc/docker/daemon.json

提示:本步骤操作仅需要在master01节点操作。

3.4 启动Docker

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "systemctl daemon-reload && systemctl enable docker && systemctl restart docker"

提示:本步骤操作仅需要在master01节点操作。

3.5 检查Docker服务

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "systemctl status docker|grep Active"
  3    Active: active (running) since Sun 2020-06-28 23:57:10 CST; 22s ago

提示:本步骤操作仅需要在master01节点操作。

3.6 检查Docker 0网桥

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "/usr/sbin/ip addr show docker0"

提示:本步骤操作仅需要在master01节点操作。

3.7 查看Docker信息

  1 [root@master01 ~]# ssh root@worker03 "ps -elfH | grep docker | grep -v grep"
  2 [root@master01 ~]# ssh root@worker03 "docker info"

提示:本步骤操作仅需要在master01节点操作。

四 部署flannel

4.1 分发flannel

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp flannel/{flanneld,mk-docker-opts.sh} root@worker03:/opt/k8s/bin/
  3 [root@master01 work]# ssh root@worker03  "chmod +x /opt/k8s/bin/*"

提示:本步骤操作仅需要在master01节点操作。

4.2 分发证书和私钥

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "mkdir -p /etc/flanneld/cert"
  3 [root@master01 work]# scp flanneld*.pem root@worker03:/etc/flanneld/cert

提示:本步骤操作仅需要在master01节点操作。

4.3 分发flannel systemd

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp flanneld.service root@worker03:/etc/systemd/system/

提示:本步骤操作仅需要在master01节点操作。

4.4 启动flannel

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"

提示:本步骤操作仅需要在master01节点操作。

4.5 检查flannel启动

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "systemctl status flanneld|grep Active"
  3    Active: active (running) since Mon 2020-06-29 00:06:27 CST; 18s ago

提示:本步骤操作仅需要在master01节点操作。

4.6 检查flannel网络信息

  1 [root@master01 ~]# ssh root@worker03  "/usr/sbin/ip addr show flannel.1 && /usr/sbin/ip addr show docker0"

提示:本步骤操作仅需要在master01节点操作。

4.7 验证各节点flannel

在各节点上部署 flannel 后,检查是否创建了 flannel 接口(名称可能为 flannel0、flannel.0、flannel.1 等):

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# ssh root@worker03 "/usr/sbin/ip addr show flannel.1 | grep -w inet"
  4     inet 10.10.224.0/32 scope global flannel.1

在各节点上 ping 所有 flannel 接口 IP,确保能通:

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# for all_ip in ${ALL_IPS[@]}
  4   do
  5     echo ">>> ${all_ip}"
  6     ssh ${all_ip} "ping -c 1 10.10.224.0"
  7   done

提示:本步骤操作仅需要在master01节点操作。

五 部署 kubelet

5.1 获取kubelet

提示:master01节点已下载相应二进制,可直接分发至worker节点。

5.2 分发kubelet

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp kubernetes/server/bin/kubelet root@worker03:/opt/k8s/bin/
  3 [root@master01 work]# ssh root@worker03 "chmod +x /opt/k8s/bin/*"

提示:本步骤操作仅需要在master01节点操作。

5.3 分发kubeconfig

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# export BOOTSTRAP_TOKEN=$(kubeadm token create \
  4       --description kubelet-bootstrap-token \
  5       --groups system:bootstrappers:worker03 \
  6       --kubeconfig ~/.kube/config)
  7 [root@master01 work]# kubectl config set-cluster kubernetes \
  8       --certificate-authority=/etc/kubernetes/cert/ca.pem \
  9       --embed-certs=true \
 10       --server=${KUBE_APISERVER} \
 11       --kubeconfig=kubelet-bootstrap-worker03.kubeconfig
 12 [root@master01 work]# kubectl config set-credentials kubelet-bootstrap \
 13       --token=${BOOTSTRAP_TOKEN} \
 14       --kubeconfig=kubelet-bootstrap-worker03.kubeconfig
 15 [root@master01 work]# kubectl config set-context default \
 16       --cluster=kubernetes \
 17       --user=kubelet-bootstrap \
 18       --kubeconfig=kubelet-bootstrap-worker03.kubeconfig
 19 [root@master01 work]# kubectl config use-context default --kubeconfig=kubelet-bootstrap-worker03.kubeconfig
 20 [root@master01 work]# kubectl get secrets  -n kube-system|grep bootstrap-token	#查看各 token 关联的 Secret

提示:本步骤操作仅需要在master01节点操作。

5.4 分发bootstrap kubeconfig

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp kubelet-bootstrap-worker03.kubeconfig root@worker03:/etc/kubernetes/kubelet-bootstrap.kubeconfig

提示:本步骤操作仅需要在master01节点操作。

5.5 分发kubelet 参数配置文件

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# sed -e "s/##ALL_IP##/172.24.8.76/" kubelet-config.yaml.template > kubelet-config-172.24.8.76.yaml.template
  4 [root@master01 work]# scp kubelet-config-172.24.8.76.yaml.template root@172.24.8.76:/etc/kubernetes/kubelet-config.yaml

提示:本步骤操作仅需要在master01节点操作。

5.6 分发kubelet systemd

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# sed -e "s/##ALL_NAME##/worker03/" kubelet.service.template > kubelet-worker03.service
  4 [root@master01 work]# scp kubelet-worker03.service root@worker03:/etc/systemd/system/kubelet.service

提示:本步骤操作仅需要在master01节点操作。

5.7 启动kubelet

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# ssh root@worker03 "mkdir -p ${K8S_DIR}/kubelet/kubelet-plugins/volume/exec/"
  4 [root@master01 work]# ssh root@worker03 "/usr/sbin/swapoff -a"
  5 [root@master01 work]# ssh root@worker03 "systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet"

提示:本步骤操作仅需要在master01节点操作。

5.8 查看kubelet服务

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# ssh root@worker03 "systemctl status kubelet"
  4 [root@master01 work]# kubectl get csr
  5 [root@master01 work]# kubectl get nodes

提示:本步骤操作仅需要在master01节点操作。

六 approve CSR 请求

6.1 查看 kubelet 的情况

  1 [root@master01 work]# kubectl get csr | grep boot	#等待一段时间(1-10 分钟),三个节点的 CSR 都被自动 approved
  2 [root@master01 work]# kubectl get nodes			#所有节点均 ready
  1 [root@master01 work]# ssh root@worker03 "ls -l /etc/kubernetes/kubelet.kubeconfig"
  2 [root@master01 work]# ssh root@worker03 "ls -l /etc/kubernetes/cert/ | grep kubelet"

提示:本步骤操作仅需要在master01节点操作。

6.2 手动 approve server cert csr

基于安全性考虑,CSR approving controllers 不会自动 approve kubelet server 证书签名请求,需要手动 approve。

  1 [root@master01 work]# kubectl get csr | grep node | grep Pending
  2 csr-hrfw7   3m4s   kubernetes.io/kubelet-serving                 system:node:worker03      Pending
  3 [root@master01 work]# kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve
  4 [root@master01 work]# ssh root@worker03 "ls -l /etc/kubernetes/cert/kubelet-*"

提示:本步骤操作仅需要在master01节点操作。

七 部署 kube-proxy

kube-proxy 运行在所有节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能。

7.1 安装kube-proxy

提示:master01 节点已下载相应二进制,可直接分发至node节点。

7.2 分发kube-proxy

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp kubernetes/server/bin/kube-proxy root@worker03:/opt/k8s/bin/
  3 [root@master01 work]# ssh root@worker03 "chmod +x /opt/k8s/bin/*"

提示:本步骤操作仅需要在master01节点操作。

7.3 分发kubeconfig

kube-proxy 使用 kubeconfig 文件访问 apiserver,该文件提供了 apiserver 地址、嵌入的 CA 证书和 kube-proxy 证书:

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp kube-proxy.kubeconfig root@worker03:/etc/kubernetes/

提示:本步骤操作仅需要在master01节点操作。

7.4 分发配置文件

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# source /root/environment.sh
  3 [root@master01 work]# sed -e "s/##ALL_NAME##/worker03/" -e "s/##ALL_IP##/172.24.8.76/" kube-proxy-config.yaml.template > kube-proxy-config-worker03.yaml.template
  4 [root@master01 work]# scp kube-proxy-config-worker03.yaml.template root@worker03:/etc/kubernetes/kube-proxy-config.yaml

提示:本步骤操作仅需要在master01节点操作。

7.5 分发kube-proxy systemd

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# scp kube-proxy.service root@worker03:/etc/systemd/system/

提示:本步骤操作仅需要在master01节点操作。

7.6 启动kube-proxy 服务

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "mkdir -p ${K8S_DIR}/kube-proxy"
  3 [root@master01 work]# ssh root@worker03 "modprobe ip_vs_rr"
  4 [root@master01 work]# ssh root@worker03 "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"

提示:本步骤操作仅需要在master01节点操作。

7.7 检查kube-proxy 服务

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "systemctl status kube-proxy | grep Active"
  3    Active: active (running) since Mon 2020-06-29 00:34:32 CST; 24s ago

提示:本步骤操作仅需要在master01节点操作。

7.8 查看监听端口

kube-proxy 监听 10249 和 10256 端口:

  • 10249:对外提供 /metrics;
  • 10256:对外提供 /healthz 的访问。
  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "sudo netstat -lnpt | grep kube-prox"

提示:本步骤操作仅需要在master01节点操作。

7.9 查看ipvs 路由规则

  1 [root@master01 ~]# cd /opt/k8s/work
  2 [root@master01 work]# ssh root@worker03 "/usr/sbin/ipvsadm -ln"

提示:本步骤操作仅需要在master01节点操作。

可见所有通过 https 访问 K8S SVC kubernetes 的请求都转发到 kube-apiserver 节点的 6443 端口。

八 确认验证

8.1 节点确认

  1 [root@master01 ~]# kubectl get nodes -o wide
  1 [root@master01 ~]# kubectl describe nodes worker03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 附018.K3S-ETCD高可用部署

    K3S是一个轻量级Kubernetes发行版。易于安装,内存消耗低,所有二进制文件不到40mb。

    木二
  • 附016.Kubernetes_v1.17.4高可用部署

    Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。HA有通常有如下两...

    木二
  • 附025.kubeadm部署Kubernetes更新证书

    提示:kubelet的/var/lib/kubelet/config.yaml配置文件中一般不会明确指定服务端证书,而是只指定 ca 根证书, 让 kubele...

    木二
  • Leetcode【700、872、897、965、1022】

    1、判断叶子的条件是 root.left == None and root.right == None,返回 [root.val]; 2、还要注意单子树的情况...

    echobingo
  • Linux创建、编辑文件、目录管理、文件解压及删除命令整理总汇

    例:$ touch hello.txt 如果 hello.txt 文件不存在,则创建文件,如果存在,则修改 hello.txt 所有的时间为当前系统的时间。

    德顺
  • Java基础 - 常用路径操作总结

    joymufeng
  • 2018年十大深度学习热门论文整理出炉了!值得一看!

    在这份论文清单中,超过75%的文章涉及深度学习和神经网络,其中卷积神经网络(CNN)的比重格外出众,而计算机视觉论文的占比也有50%。在前人优秀论文的指引下,随...

    崔庆才
  • 打包命令tar

    tar是linux下最常用的打包命令,使用tar打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的,也有.gz或.bz2结尾的。

    用户1432189
  • 大数据Hadoop快速入门教程

    1、Hadoop生态概况 Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的...

    CSDN技术头条
  • PASCAL VOC数据集训练集、验证集、测试集的划分和提取

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇

扫码关注云+社区

领取腾讯云代金券