zoukankan      html  css  js  c++  java
  • 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节点操作。

    clipboard

    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"

    clipboard

    提示:本步骤操作仅需要在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

    clipboard

    提示:本步骤操作仅需要在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

    clipboard

      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-*"

    clipboard

    提示:本步骤操作仅需要在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节点操作。

    clipboard

    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

    clipboard

      1 [root@master01 ~]# kubectl describe nodes worker03

    clipboard

  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/itzgr/p/13207102.html
Copyright © 2011-2022 走看看