一 前置准备

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. MySQL日志(redo log、binlog)刷盘策略

    通过上篇文章,我们知道MySQL是采用两段提交策略来保证事务的原子性的,redo log刷盘的时机是在事务提交的commit阶段采取刷盘的,在此之前,redo log都存在于redo log buff ...

  2. Linux 内核:设备驱动模型(4)uevent与热插拔

    Linux 内核:设备驱动模型(4)uevent与热插拔 背景 我们简单回顾一下Linux的设备驱动模型(Linux Device Driver Model,LDDM): 1.在<sysfs与k ...

  3. 常见 i2c设备地址

    背景 朋友分享的一份i2c器件地址清单,我觉得还不错. reference:https://learn.adafruit.com/i2c-addresses/the-list Special case ...

  4. ETL服务器连接GaussDB(DWS)集群客户端配置

    问题描述:给ETL的服务器上安装gsql的工具,用来连接GaussDB(DWS)集群,做数据抽取用 DWS:GaussDB(DWS) 8.2.1-ESL 1.获取软件包 登录FusionInsight ...

  5. aop的两种配置方法

    一.实现接口并重写方法 实现org.aopalliance.intercept.MethodInterceptor接口,这是AOP Alliance规范中的接口,Spring AOP支持它.这种方式比 ...

  6. yb课堂 新版SSM-SpringBoot2.X 后端项目框架搭建 《二》

    在线创建 https://start.spring.io/ 依赖项 Spring Boot核心包 <dependency> <groupId>org.springframewo ...

  7. Java-C3P0和Druid连接池的运用

    1.概念 其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器被创建,容器会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器. 好 ...

  8. Docker开始收费了,开始转学podman【第一篇podman容器的安装和基本操作】

    podman 什么是Podman?Podman是无守护程序容器引擎,用于在Linux系统上开发,管理和运行OCI容器.容器可以以root用户或无根模式运行.简而言之:`alias docker = p ...

  9. 解决方案 | 使用python中的os模块准确获取不带后缀的文件名和扩展名

    1. 问题 如何使用python获取不带后缀的文件名? 2. 解决方法 如下图 import os file_name = "examp.le.pdf" file_name1_wi ...

  10. 解决方案 | Get-AppxPackage : 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动

    前几天由于需要卸载一些win10自带应用,导致onenote2016无法启动(根本原因:当时可能remove-appxpackage导致某些微软原生应用出现问题),同时今天使用power shell出 ...