一 前置准备

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

017.Kubernetes二进制集群扩容worker的更多相关文章

  1. 019.Kubernetes二进制集群存储longhorn

    一 Longhorn存储部署 1.1 Longhorn概述 Longhorn是用于Kubernetes的开源分布式块存储系统. 提示:更多介绍参考:https://github.com/longhor ...

  2. 5.基于二进制部署kubernetes(k8s)集群

    1 kubernetes组件 1.1 Kubernetes 集群图 官网集群架构图 1.2 组件及功能 1.2.1 控制组件(Control Plane Components) 控制组件对集群做出全局 ...

  3. Kubernetes容器集群管理环境 - 完整部署(上篇)

    Kubernetes(通常称为"K8S")是Google开源的容器集群管理系统.其设计目标是在主机集群之间提供一个能够自动化部署.可拓展.应用容器可运营的平台.Kubernetes ...

  4. 手动部署 kubernetes HA 集群

    前言 关于kubernetes HA集群部署的方式有很多种(这里的HA指的是master apiserver的高可用),比如通过keepalived vip漂移的方式.haproxy/nginx负载均 ...

  5. Kubernetes容器集群管理环境 - 完整部署(中篇)

    接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...

  6. Kubernetes&Docker集群部署

    集群环境搭建 搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单 ...

  7. Centos7 安装部署Kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  10. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

随机推荐

  1. Linux开机启动三种方式

    有的时候,我们开机启动一些命令或者是一段脚本,又或者是开机启动自定义的服务. 下面归纳了2种实现的方式. 方式1-开机启动命令 vim /etc/rc.local #添加你想执行的命令 chmod + ...

  2. Linux 内核:GPIO子系统(1)软件框架

    Linux 内核:GPIO子系统(1)软件框架 背景 在很多驱动开发中,GPIO用得很多,因此学习一下:也会顺便看看pinctrl 子系统. 原文(有删改):http://www.wowotech.n ...

  3. VS Code Go开发环境配置

    1.安装Go 下载网址:https://go.dev/doc/install 根据自己的操作系统来进行安装,官网针对Windows.Linux.macOS都有对应教程.安装完成后打开终端,输入go v ...

  4. BigCodeBench: 继 HumanEval 之后的新一代代码生成测试基准

    HumanEval 是一个用于评估大型语言模型 (LLM) 在代码生成任务中的参考基准,因为它使得对紧凑的函数级代码片段的评估变得容易.然而,关于其在评估 LLM 编程能力方面的有效性越来越多的担忧, ...

  5. 使用EF 连接 数据库 SQLserver、MySql 实现 CodeFirst

    1.新建项目,下载Nuget安装包 创建项目需要注意几点,如果是基于 .net framework 的项目 需要选择 相应版本的 EF, 如果是跨平台则选择EF Core版本. 我这里选择的是 .ne ...

  6. 【Hadoop报错】The directory item limit is exceeded: limit=1048576 items=1048576

    问题描述: 调度系统执行hive任务失败,一直执行失败,报错如下: java.io.IOException: java.net.ConnectException: Call From #HostNam ...

  7. P7687 题解

    考场上数组开大了直接 MLE 了,气. 考虑把 A,B 两种服务分开算,一个边双连通分量内的点如过有一个有服务,那么整个联通分量就都有服务. 然后按边双联通分量缩点后原图变成树,一条边是关键路线当且仅 ...

  8. Win10 下安装使用easyocr图片识别工具

    [前言] 最近在做图像识别相关的工作,找到了一个名为EasyOCR的pythoh 库. 使用过程中出现了一些问题,现做简单记录. [正文] 1. 安装EasyOCR 我用了最简单的方法:pip3 in ...

  9. SpringBoot学习篇

    什么是SpringBoot?为什么要用SpringBoot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 创建独立的spring引用程序 ...

  10. yb课堂之自定义异常和配置 《五》

    开发自定义异常和配置 自定义异常 继承RuntimeException 开发异常处理器ExceptionHandle YBException.java package net.ybclass.onli ...