真香K8S!!二进制单节点部署

单节点部署规划

1.相关软件包

Master:192.168.10.10 kube-apiserver kube-controller-manager kube-scheduler etcd
Node01:192.168.10.20 kubelet kube-proxy docker flannel etcd
Node02:192.168.10.30 kubelet kube-proxy docker flannel etcd

2.注意点

  • 在生产环境中 Etcd 一般都是放在master上的,(因为master是要确保不能宕机的,因此放在master上较为安全,因为是实验环境,因此放到node节点上也行)
  • master服务器上需要apiserver核心部件,contorller、scheduler部件以及etcd数据库node节点需要docker环境,flannel网络插件分配网络,etcd数据库群集(部署在node上方便实验),proxy代理部件,以及kubelet部件,kubelet在这个单节点实验中主要的作用是想master提交证书的申请

注意点:在master上一定不要安装docker,为了保障master的安全性,预防黑客攻破接地那服务器,通过docker控制master

K8S部署

一、etcd群集部署

官网地址:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1

在所有主机上操作

1.给三台主机设置别名
[root@localhost ~]# hostnamectl set-hostname master01
[root@localhost ~]# su
[root@master01 ~]# 
[root@localhost ~]# hostnamectl set-hostname node01
[root@localhost ~]# su
[root@master01 ~]# 
[root@localhost ~]# hostnamectl set-hostname node02
[root@localhost ~]# su
[root@master01 ~]# 

在master上操作

1.创建k8s工作目录
[root@master01 ~]#  mkdir k8s

[root@master01 ~]#  cd k8s/
2.下载cfssl工具,三个工具

下载证书制作工具(cfssl cfssl-certinfo cfssljson)已经下载好了,直接从宿主机拿过来

[root@localhost k8s]# vim cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo

[root@localhost k8s]# bash cfssl.sh   ##执行脚本下载cfssl官方包
[root@master01 k8s]# ls /usr/local/bin/        ##已经下载好了,直接从宿主机拉取过来
cfssl  cfssl-certinfo  cfssljson
[root@master01 k8s]# mv * /usr/local/bin/
[root@master01 k8s]# cd /usr/local/bin/
[root@master01 bin]# chmod +x *


--------------------------------------------------------------------------------------------------------------

工具包用途

 cfssl :生成证书工具
 cfssljson:通过传入json文件生成证书
 cfssl-certinfo:查看证书信息

--------------------------------------------------------------------------------------------------------------

3.定义ca证书的配置文件
[root@master01 bin]# mkdir ~/k8s/etcd-cert                  ##创建证书存放目录

[root@master01 k8s]#  cd ~/k8s/etcd-cert/
[root@master01 etcd-cert]# cat > ca-config.json <<EOF

> {
> "signing": {                         ##定义了下面的签字内容
>  "default": {
>    "expiry": "87600h"          ## 有效期10年
>  },
>  "profiles": {                        ## 定义文件类型为配置文件 
>    "www": {                          ## 以www开头
>       "expiry": "87600h",       ## 有效期10年
>       "usages": [                    ## 用法
>          "signing",                   ## 签字
>          "key encipherment", ## 加密秘钥的方式
>          "server auth",            ## 服务器认证
>          "client auth"              ## 客户端认证
>      ]
>    }
>  }
> }
> }
> EOF

—————————————————————————————————————
补充解释:

  • ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;

  • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;

  • server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证;

  • client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证;

—————————————————————————————————————

4.实现证书签名的请求文件
[root@master01 etcd-cert]# cat > ca-csr.json <<EOF 
{   
"CN": "etcd CA",       ## CN 指定该证书的 User 为 etcd CA;etcd的ca证书
"key": {                      ## 定义key类型
  "algo": "rsa",         ## rsa非对称秘钥
  "size": 2048          ## 秘钥长度,注意点:几个证书指明的秘钥长度一定要一样
},
"names": [                ## 证书的names内指定证书包含的信息,可以包含国家,地区,公司,部门等等(注意:几个证书的names信息一定要相同)
  {
      "C": "CN",          ## 中国
      "L": "Beijing",     ## 北京
      "ST": "Beijing"   ## 北京时区
  }
]
}
EOF

————————————————————————————————

补充解释:

  • “CN”:“Common Name”,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
    CN 指定该证书的 User 为 etcd CA;
  • “O”:“Organization”,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);也可以是组织
  • “OU”:组织单位
  • key:证书加密的方式,一般是RSA 2048
  • L 字段 :所在城市 (Locality) 简称
  • S 字段:所在省份 (State/Provice)
  • C 字段:所在国家 (Country),只能是国家字母缩写,如中国:CN
  • names:证书包含的信息,可以包含国家,地区,公司,部门等等,我们可以在kubeadm中修改对于这部分内容的验证,达到证书的管理控制功能。

———————————————————————————————

5.生成ca证书,生成ca-key.pem ca.pem
[root@master01 etcd-cert]# ls
ca-config.json  ca-csr.json

[root@master01 etcd-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
2020/11/22 02:59:32 [INFO] generating a new CA key and certificate from CSR
2020/11/22 02:59:32 [INFO] generate received request
2020/11/22 02:59:32 [INFO] received CSR
2020/11/22 02:59:32 [INFO] generating key: rsa-2048
2020/11/22 02:59:33 [INFO] encoded CSR
2020/11/22 02:59:33 [INFO] signed certificate with serial number 9797308770013994243491625199529899647280639512

[root@master01 etcd-cert]# ls    ##生成两个ca证书
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

  • cfssl gencert生成"CA证书"和"CA私钥"的指令,cfssljson -bare ca - 指读取基本信息

  • cfssljson:通过传入json文件生成证书

  • 生成: ca.pem ca-key.pem ca.csr (证书签名请求,用于交叉签名或重新签名)


6.指定etcd三个节点之间的通信验证
[root@master01 etcd-cert]# cat > server-csr.json <<EOF
{
    "CN": "etcd",               ## 指明 CN 指定该证书的 User 为 etcd ,etcd的server证书
    "hosts": [                  ## 指定通讯节点
    "192.168.10.10",
    "192.168.10.20",
    "192.168.10.30"
    ],
    "key": {                    ##定义秘钥
        "algo": "rsa",          ## rsa类型
        "size": 2048            ## 长度是2048
    },
    "names": [                  ## 证书的名称内指定了授权证书的CA机构的具体区域
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}
EOF

7. 生成ETCD服务端证书

server-key.pem 和 server.pem

[root@master01 etcd-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
2020/11/22 03:06:19 [INFO] generate received request
2020/11/22 03:06:19 [INFO] received CSR
2020/11/22 03:06:19 [INFO] generating key: rsa-2048
2020/11/22 03:06:19 [INFO] encoded CSR
2020/11/22 03:06:19 [INFO] signed certificate with serial number 703113062882105094636341796051856934816186724582

[root@master01 etcd-cert]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  server.csr  server-csr.json  server-key.pem  server.pem

———————————————————————————

注意:到这一步, 有用的文件是:

  • ca-key.pem ca.pem server-key.pem server.pem 这四个证书(两个server证书,两个ca证书)

  • ca的签名文件ca.csr可以删除,是没有用的,但是 ca-csr.json server-csr.json ca-config.json 这三个json格式的证书最好自己保留一份下来,里面记录了秘钥长度,CA机构信息(如beijin)等,以防更新证书时忘记了里面的信息,导致更新失败。毕竟生产环境中的服务节点有很多

—————————————————————------------————————

8.下载ETCD二进制包,并解压

————————————————————————-----———————

ETCD 二进制包下载地址:https://github.com/etcd-io/etcd/releases

需要用到下面三个软件包,可以在上面网址下载,(已经下载好了,直接从宿主机中拿来)

etcd-v3.3.10-linux-amd64.tar.gz
flannel-v0.10.0-linux-amd64.tar.gz
kubernetes-server-linux-amd64.tar.gz

———————————————————————————————

[root@master01 ~]# ls *.tar.gz    ##查看相关软件包
etcd-v3.3.10-linux-amd64.tar.gz  flannel-v0.10.0-linux-amd64.tar.gz  kubernetes-server-linux-amd64.tar.gz
[root@master01 ~]# mv $(ls *.tar.gz) k8s/     ## 将这几个包移动到 k8s 目录下

[root@master01 k8s]# ls ~/k8s/*.tar.gz     ## 查看是否移动到 k8s 目录下
etcd-cert  etcd-v3.3.10-linux-amd64.tar.gz  flannel-v0.10.0-linux-amd64.tar.gz  kubernetes-server-linux-amd64.tar.gz

[root@master01 k8s]#  tar zxvf etcd-v3.3.10-linux-amd64.tar.gz

[root@master01 k8s]# ls 
etcd-v3.3.10-linux-amd64Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md
9.创建etcd工作目录
[root@master01 k8s]#  mkdir /opt/etcd/{cfg,bin,ssl} -p       ##创建k8s目录下三个子目录,cfg配置文件目录、bin命令文件目录、ssl证书文件目录

[root@master01 k8s]# mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/     ##将etcd 和 etcdctl这两个工具存放到/opt/etcd/bin/下

[root@master01 k8s]# cp etcd-cert/*.pem /opt/etcd/ssl/     ## 将几个证书文件复制放到ssl目录下

[root@master01 k8s]# cd /opt/etcd/bin/       ##cd 到 /opt/etcd/bin/ 下

[root@master01 bin]# rz -E       ##将宿主机上已经写好的 etcd.sh 构建集群的脚本复制过来

[root@master01 bin]# ls etcd.sh   
etcd.sh

————————————————————————————————

[root@master01 bin]# cat etcd.sh         ##查看etcd.sh脚本内容

# !/bin/bash

# example: bash etcd.sh etcd01 192.168.10.10 etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380    ##执行脚本侯建集群的示例,

ETCD_NAME=$1         ## 定义了变量,值是"示例命令"中的etcd01
ETCD_IP=$2                ## 定义的变量,值是etcd01的ip
ETCD_CLUSTER=$3     ## 定义了变量值为 etcd 群集中的其他成员的 名称 及 ip 地址

WORK_DIR=/opt/etcd   ##定义了工作目录

cat <<EOF >$WORK_DIR/cfg/etcd                      ## 生成etcd文件到cfg配置文件目录下

# [Member]                                         ## 对etcd成员的配置

ETCD_NAME="${ETCD_NAME}"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"         ## 定义数据存放目录
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"    ## 开放群集之间内部通讯的一个端口 2379
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"         ## 自己(即etcd01)对外客户端开放的一个端口是2380
 
# [Clustering]                                       ## 集群内的配置

ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"                ## 同样群集内部通讯的端口
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"            ## 对外开放的端口
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"                ## 群集内所有节点的配置
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"                                                                  ## token认证令牌"etcd-cluster",每个etcd节点必须一致
ETCD_INITIAL_CLUSTER_STATE="new"                ## 指明状态,构建新集群的状态
EOF

cat <<EOF >/usr/lib/systemd/system/etcd.service          ## systemctl启动文件
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify                                                                                                        ## 类型:notify
EnvironmentFile=${WORK_DIR}/cfg/etcd                 ## 配置文件所在位置
ExecStart=${WORK_DIR}/bin/etcd \                                                                   ## 启动文件 /opt/etcd/bin/etcd
--name=\${ETCD_NAME} \                              ## 指明了名称 etcd01
--data-dir=\${ETCD_DATA_DIR} \                      ## 指明数据存放目录
--listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \      ## 指定群集间内部通讯端口2380
--listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \     ## 客户端监听端口2379,监听本地2379端口,放开给客户端
--advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \
--initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=\${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \
--initial-cluster-state=new \
--cert-file=${WORK_DIR}/ssl/server.pem \                 ## 指明服务端证书
--key-file=${WORK_DIR}/ssl/server-key.pem \              ## 指明服务端秘钥证书
--peer-cert-file=${WORK_DIR}/ssl/server.pem \            ## 匹配服务端证书
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \         ## 匹配服务端秘钥证书
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \               ## 指定可信证书CA证书
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem            ## 匹配可信证书CA证书
Restart=on-failure                                       ## 重启策略
LimitNOFILE=65536                                        ## 限制用户打开最大文件数                                          

[Install]
WantedBy=multi-user.target                                ## 运行多用户登入
EOF

systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd

—————————————————————————————————

10.进入卡住状态等待其他节点加入
[root@master01 bin]#  bash etcd.sh etcd01 192.168.10.10 etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380

[root@master01 bin]#  ps aux | grep etcd   ##使用另外一个终端打开,会发现etcd进程已经开启
11.将 /opt/ 目录下 etcd/ 目和启动文件cp到其他etcd节点

(里面有配置文件、证书文件、命令文件),然后进行部分修改即可

[root@master01 bin]# scp -r /opt/etcd/ root@192.168.10.20:/opt/
root@192.168.10.20's password: 
etcd                              100%  509   238.5KB/s   00:00    
etcd                              100%   18MB  67.1MB/s   00:00    
etcdctl                           100%   15MB  91.6MB/s   00:00    
etcd.sh                           100% 1764   929.1KB/s   00:00    
ca-key.pem                        100% 1675     2.2MB/s   00:00    
ca.pem                            100% 1265   958.4KB/s   00:00    
server-key.pem                    100% 1679     1.7MB/s   00:00    
server.pem                        100% 1338     1.4MB/s   00:00    

[root@master01 bin]# scp -r /opt/etcd/ root@192.168.10.30:/opt/
root@192.168.10.30's password: 
etcd                              100%  509   238.5KB/s   00:00    
etcd                              100%   18MB  67.1MB/s   00:00    
etcdctl                           100%   15MB  91.6MB/s   00:00    
etcd.sh                           100% 1764   929.1KB/s   00:00    
ca-key.pem                        100% 1675     2.2MB/s   00:00    
ca.pem                            100% 1265   958.4KB/s   00:00    
server-key.pem                    100% 1679     1.7MB/s   00:00    
server.pem                        100% 1338     1.4MB/s   00:00  

[root@master01 bin]# scp /usr/lib/systemd/system/etcd.service root@192.168.10.20:/usr/lib/systemd/system/

[root@master01 bin]# scp /usr/lib/systemd/system/etcd.service root@192.168.10.30:/usr/lib/systemd/system/

在node01节点上操作

1.修改配置文件
[root@node01 ~]# cd /opt/etcd/cfg
[root@node01 ~]# vim etcd 

# [Member]

ETCD_NAME="etcd03"       ##修改etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.30:2380"   ##修改ip  
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.30:2379"   ##修改ip

# [Clustering]

ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.10.30:2380"   ##修改ip
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.10.30:2379"   ##修改ip
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.10.10:2380,etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
2.启动etcd服务

注意:要在master处于等待etcd群集节点加入状态下启动etcd服务

[root@localhost ssl]# systemctl start etcd

[root@localhost ssl]# systemctl status etcd

在node02节点上操作

1.修改配置文件
[root@node02 ~]# cd /opt/etcd/cfg
[root@node02 ~]# vim etcd 

# [Member]

ETCD_NAME="etcd03"       ##修改etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.30:2380"   ##修改ip  
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.30:2379"   ##修改ip

# [Clustering]

ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.10.30:2380"   ##修改ip
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.10.30:2379"   ##修改ip
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.10.10:2380,etcd02=https://192.168.10.20:2380,etcd03=https://192.168.10.30:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
2.启动etcd服务
[root@localhost ssl]# systemctl start etcd

[root@localhost ssl]# systemctl status etcd
3.检查etcd群集状态

在任意etcd节点都可以检查

[root@node02 cfg]# cd /opt/etcd/ssl/

[root@node02 ssl]# /opt/etcd/bin/etcdctl \
--ca-file=ca.pem \
--cert-file=server.pem \
--key-file=server-key.pem \
--endpoints=\
"https://192.168.10.10:2379,\
https://192.168.10.20:2379,\
https://192.168.10.30:2379" \
cluster-health

member 23599d5be7403bf7 is healthy: got healthy result from https://192.168.10.30:2379
member 245f0eaff21d8741 is healthy: got healthy result from https://192.168.10.10:2379
member be3fc3d5e1dfe2ce is healthy: got healthy result from https://192.168.10.20:2379
cluster is healthy

二、flannel网络配置

在node01节点操作

1.安装docker-ce
[root@node01 cfg]# yum -y install yum-utils device-mapper-persistent-data lvm2

[root@node01 ssl]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@node01 ssl]# yum install -y docker-ce 

[root@node01 cfg]# sudo mkdir -p /etc/docker

[root@node01 cfg]# sudo tee /etc/docker/daemon.json <<-'EOF'

{
"registry-mirrors": ["https://c98mzoaz.mirror.aliyuncs.com"]
}
EOF

[root@node01 cfg]# sudo systemctl daemon-reload

[root@node01 cfg]# echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf 

[root@node01 cfg]# sysctl -p
net.ipv4.ip_forward = 1

[root@node01 cfg]# systemctl restart network 
[root@node01 cfg]# systemctl restart docker 
[root@node02 cfg]# systemctl enable docker 
 
[root@node02 cfg]# systemctl restart network 

node02节点操作

1.安装docker-ce
[root@node01 cfg]# yum -y install yum-utils device-mapper-persistent-data lvm2

[root@node01 ssl]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@node01 ssl]# yum install -y docker-ce 

[root@node01 cfg]# sudo mkdir -p /etc/docker

[root@node01 cfg]# sudo tee /etc/docker/daemon.json <<-'EOF'

{
"registry-mirrors": ["https://c98mzoaz.mirror.aliyuncs.com"]
}
EOF

[root@node01 cfg]# sudo systemctl daemon-reload

[root@node01 cfg]# echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf 

[root@node01 cfg]# sysctl -p
net.ipv4.ip_forward = 1

[root@node01 cfg]# systemctl restart network 
[root@node01 cfg]# systemctl restart docker 
[root@node02 cfg]# systemctl enable docker 

[root@node02 cfg]# systemctl restart network 

master上操作

1.入分配的子网段到ETCD中,供flannel使用

在这个实验中并不一定非要在master上操作,因为节点上也有etcd群集,但是生产环境中etcd一般是布局在master上的

[root@master01 ssl]# cd /opt/etcd/ssl/
[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \
--endpoints="https://192.168.10.10:2379,\
https://192.168.10.20:2379,\
https://192.168.10.30:2379" \
set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

##解释:
--endpoints :指定etcd节点
set :插入 "键值对" 数据信息 ,/coreos.com/network/config 为自定义的集合名;
'{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}' 为 集合内的键值对信息

##返回结果{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}##

2.查看写入etcd数据库的网络规划信息
[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \
--endpoints="https://192.168.10.10:2379,\
https://192.168.10.20:2379,\
https://192.168.10.30:2379" \
get /coreos.com/network/config      ## get查看数据


{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}

到node节点操作

(两个节点操作相同)

1.解压flannel工具包
[root@localhost ~]# ls      ## 需要 flannel 软件包
flannel-v0.10.0-linux-amd64.tar.gz 

[root@localhost ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz     ##解压压缩包,生成下面是两个文件
flanneld
mk-docker-opts.sh
README.md


2.创建kubernetes工作目录

目录下创建配置文件目录、执行脚本目录、证书文件目录,并将解压生成的 mk-docker-opts.sh 和 flanneld 放到执行脚本目录下

[root@node01 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@node01 ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/

[root@localhost bin]# ls     ## 将 flannel.sh 脚本文件从宿主机拉进来
flannel.sh  

[root@localhost bin]# chmod +x flannel.sh ##给执行权限

—————------———————分析脚本——————---------——————

[root@localhost bin]# cat flannel.sh                                   ## 查看分析脚本

# !/bin/bash

ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"}             
## 指定etcd节点,从2379端口请求,${1:-"http://127.0.0.1:2379"} 的含义是传入参数$1,若没有$1,这赋值变量"http://127.0.0.1:2379"

cat <<EOF >/opt/kubernetes/cfg/flanneld             ## 制作 kubernetes 配置文件

FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \  ## 通过证书连接etcd,请求网段信息
-etcd-cafile=/opt/etcd/ssl/ca.pem \
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem"

EOF

cat <<EOF >/usr/lib/systemd/system/flanneld.service         ##生成启动脚本
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service                      ## 指明了依赖于docker服务,所以要先安装docker

[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure                              ## 重启策略

[Install]
WantedBy=multi-user.target

EOF

systemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld

———————————————————————————————

3.开启flannel网络功能
[root@node01 bin]# ./flannel.sh https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379

Created symlink from /etc/systemd/system/multi-user.target.wants/flanneld.service to /usr/lib/systemd/system/flanneld.service.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86V1PlYU-1605984203975)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605973039103.png)]

4.配置docker连接 flannel
[root@localhost bin]# vim /usr/lib/systemd/system/docker.service          ##修改docker服务文件

EnvironmentFile=/run/flannel/subnet.env              ## 添加这个环境配置文件
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock    ##在准启动项后面添加"$DOCKER_NETWORK_OPTIONS",在-H前面添加

[root@localhost bin]# systemctl daemon-reload 

[root@localhost bin]# systemctl restart docker

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGJjZx3y-1605984203978)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605973514472.png)]

——————————————————————————————

补充:

我们可以在flannel的网段划分的环境文件 /run/flannel/subnet.env 中查看到 $DOCKER_NETWORK_OPTIONS 这个变量的值

[root@localhost bin]# cat /run/flannel/subnet.env
DOCKER_OPT_BIP="--bip=172.17.37.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"
DOCKER_NETWORK_OPTIONS=" --bip=172.17.37.1/24 --ip-masq=false --mtu=1450"    
## 可以看到这个变量,设置了bip网桥地址,--ip-masq=false不进行地址伪装,--mtu=1450最大传输单元1450(最大值是1500)

flannelhi依据写入到etcd数据库的网段信息,进行子网划分,并将划分的网段信息写入到/run/flannel/subnet.env环境变量文件中。

——————————————————————————————

5.进行flannel 网络的测试,证明其路由功能
5.1 在node1节点创建容器

[root@node01 bin]# docker run -itd --name centos centos:7 /bin/bash

[root@node01 bin]# docker exec -it centos /bin/bash

[root@748e61b13bda /]# yum -y install net-tools

在这里插入图片描述

5.2 在node2节点创建容器

[root@node02 bin]# docker run -itd --name centos centos:7 /bin/bash

[root@node02 bin]# docker exec -it centos /bin/bash

[root@feb848f18a3a /]# yum -y install net-tools

在这里插入图片描述

三、部署master组件

master三部件:apiserver、controller-manager、scheduler

在master上操作

1.解压工具包
[root@master01 ~]# ls          ##从宿主机将软件包拿过来

master.zip 

[root@master01 ~]# unzip master.zip    ##解压后获得三部件的脚本
Archive:  master.zip
  inflating: apiserver.sh            
  inflating: controller-manager.sh   
  inflating: scheduler.sh         
  
[root@master01 ~]# ls *.sh
apiserver.sh  controller-manager.sh  scheduler.sh

[root@master01 ~]# mv *.sh k8s/
2.创建kubernetes工作目录及证书目录
[root@master01 ~]#  mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@master01 ~]# mkdir ~/k8s/k8s-cert
3.定义ca证书配置的json文件
[root@master01 ~]# cd ~/k8s/k8s-cert/
[root@master01 k8s-cert]# cat > ca-config.json <<EOF
{
"signing": {                      ## 签名,定义了签署的证书可以用于其他多个证书的申请
 "default": {
   "expiry": "87600h"             ## 签名有效期10年
 },
 "profiles": {                     ## 描述信息
   "kubernetes": {                 ## 服务名
      "expiry": "87600h",          ## 有效期10年
      "usages": [                  ## 使用说明,用法
         "signing",                ## 用于签名
         "key encipherment",       ## 加密秘钥
         "server auth",            ## 用于服务端认证
         "client auth"             ## 用于客户端认证
     ]
   }
 }
}
}
EOF

[root@master01 k8s-cert]# ls
ca-config.json

4.用于ca证书签发的请求文件

[root@master01 k8s-cert]# cat > ca-csr.json <<EOF
{
 "CN": "kubernetes",      ## 该证书的 User 为 "kubernetes"
 "key": {
     "algo": "rsa",
     "size": 2048
 },
 "names": [
     {
         "C": "CN",
         "L": "Beijing",
         "ST": "Beijing",
         "O": "k8s",       ##kube-apiserver从证书中提取该字段作为请求用户所属的组 (Group);也可以是组织
         "OU": "System"
     }
 ]
}
EOF

[root@master01 k8s-cert]# ls
ca-config.json  ca-csr.json
5.生成kubernetes的ca证书

依赖于ca-csr.json(ca签发请求证书)来签发ca证书

[root@master01 k8s-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

2020/11/22 08:40:06 [INFO] generating a new CA key and certificate from CSR
2020/11/22 08:40:06 [INFO] generate received request
2020/11/22 08:40:06 [INFO] received CSR
2020/11/22 08:40:06 [INFO] generating key: rsa-2048
2020/11/22 08:40:06 [INFO] encoded CSR
2020/11/22 08:40:06 [INFO] signed certificate with serial number 144724952924774536196355667686885693995953286118
6.用于请求服务端证书签发的请求文件
[root@master01 k8s-cert]# cat > server-csr.json <<EOF
{
    "CN": "kubernetes",
    "hosts": [
      "10.0.0.1",
      "127.0.0.1",
      "192.168.10.10",
      "192.168.10.40",
      "192.168.10.100",
      "192.168.10.50",
      "192.168.10.60",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

[root@master01 k8s-cert]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  server-csr.json

7.生成服务端ca证书

依赖于ca.pem(ca证书)、ca-key.pem(ca秘钥证书)、 ca-config.json(ca配置文件)来生成服务端证书

[root@master01 k8s-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

2020/11/22 08:45:32 [INFO] generate received request

……省略部分
specifically, section 10.2.3 ("Information Requirements").

[root@master01 k8s-cert]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  server.csr  server-csr.json  server-key.pem  server.pem
8.制作admin管理用户的证书请求文件
[root@master01 k8s-cert]# cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF
9.生成admin的ca证书
[root@master01 k8s-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

2020/11/22 08:55:02 [INFO] generate received request
2020/11/22 08:55:02 [INFO] received CSR
……省略部分
Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

[root@master01 k8s-cert]# ls
admin.csr       admin-key.pem  ca-config.json  ca-csr.json  ca.pem      server-csr.json  server.pem
admin-csr.json  admin.pem      ca.csr          ca-key.pem   server.csr  server-key.pem
10.制作用于proxy代理的ca证书请求文件
[root@master01 k8s-cert]# cat > kube-proxy-csr.json <<EOF
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
11.生成proxy的ca证书

同样依赖于ca.pem(ca证书)、ca-key.pem(ca秘钥证书)、 ca-config.json(ca配置文件)来生成proxy的证书

[root@master01 k8s-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

2020/11/22 08:59:29 [INFO] generate received request
2020/11/22 08:59:29 [INFO] received CSR
……省略部分
(https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

[root@master01 k8s-cert]# ls
admin.csr       admin.pem       ca-csr.json  kube-proxy.csr       kube-proxy.pem   server-key.pem
admin-csr.json  ca-config.json  ca-key.pem   kube-proxy-csr.json  server.csr       server.pem
admin-key.pem   ca.csr          ca.pem       kube-proxy-key.pem   server-csr.json
12.查看K8S证书

批注:在宿主机内写了8个证书生成的汇总脚本,可以直接拿来用,不用一步一步来生成。

[root@master01 k8s-cert]#  ls *pem
admin-key.pem  admin.pem  ca-key.pem  ca.pem  kube-proxy-key.pem  kube-proxy.pem  server-key.pem  server.pem

[root@master01 k8s-cert]# cp ca*pem server*pem /opt/kubernetes/ssl/

[root@master01 k8s-cert]# ls /opt/kubernetes/ssl/
ca-key.pem  ca.pem  server-key.pem  server.pem

13.解压kubernetes压缩包

批注:压缩包下载在宿主机内,直接拿出来用

[root@master01 k8s]# tar zxvf kubernetes-server-linux-amd64.tar.gz
14.复制关键命令文件到/opt/kubernetes/bin/下

[root@master01 k8s]# cd /root/k8s/kubernetes/server/bin

[root@master01 bin]# cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

15.制作token令牌文件
[root@localhost k8s]# cat > /opt/kubernetes/cfg/token.csv <<EOF
$(head -c 16 /dev/urandom | od -An -t x | tr -d ' '),kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
##使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 可以随机生成序列号

[root@master01 ~]# cat  /opt/kubernetes/cfg/token.csv
89c3f368ad830f644d746b31e0b4554c,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
token令牌序列号                       用户名            id        角色
16.开启apiserver

二进制文件,token,证书都准备好,开启apiserver

[root@master01 ~]# cd /root/k8s/

[root@master01 k8s]# bash apiserver.sh 192.168.10.10 https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379

Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service.

[root@master01 k8s]#  ps aux | grep kube    ##检查进程是否启动成功
root      43776 51.6  8.0 399676 312700 ?       Ssl  09:40   0:08 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379 --bind-address=192.168.10.10 --secure-port=6443 --advertise-address=192.168.10.10 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 ……省略部分
cafile=/opt/etcd/ssl/ca.pem --etcd-certfile=/opt/etcd/ssl/server.pem --etcd-keyfile=/opt/etcd/ssl/server-key.pem
root      43794  0.0  0.0 112660   968 pts/0    R+   09:41   0:00 grep --color=auto kube


17.查看配置文件
[root@master01 k8s]#  cat /opt/kubernetes/cfg/kube-apiserver 

KUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379 \
--bind-address=192.168.10.10 \
--secure-port=6443 \
--advertise-address=192.168.10.10 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--kubelet-https=true \
--enable-bootstrap-token-auth \
--token-auth-file=/opt/kubernetes/cfg/token.csv \
--service-node-port-range=30000-50000 \
--tls-cert-file=/opt/kubernetes/ssl/server.pem  \
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem"

18.查看监听的https端口
[root@master01 k8s]# netstat -ntap | grep 6443
tcp        0      0 192.168.10.10:6443      0.0.0.0:*               LISTEN      43776/kube-apiserve 
tcp        0      0 192.168.10.10:39106     192.168.10.10:6443      ESTABLISHED 43776/kube-apiserve 
tcp        0      0 192.168.10.10:6443      192.168.10.10:39106     ESTABLISHED 43776/kube-apiserve 
[root@master01 k8s]# netstat -ntap | grep 8080
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      43776/kube-apiserve 

19.启动scheduler服务
[root@master01 k8s]# ./scheduler.sh 127.0.0.1

Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.

[root@master01 k8s]# ps aux | grep ku
……省略部分
/opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=https://192.168.10.10:2379,https://192.168.10.20:2379,https://192.168.10.30:2379 --bind-address=192.168.10.10 --secure-port=6443 --advertise-address=192.168.10.10 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction --authorization-mode=RBAC,Node --kubelet-https=true --enable-bootstrap-token-auth --……省略部分

20.启动controller-manager
[root@master01 k8s]# bash controller-manager.sh 127.0.0.1

Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service.
21.查看master 节点状态
[root@master01 k8s]# /opt/kubernetes/bin/kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-1               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"}   
etcd-2               Healthy   {"health":"true"}   

22.将kubelet 和 kube-proxy 两个国家scp给两个节点

也可以重新去节点解压压缩包获得者两个工具

[root@master01 bin]# cd /root/k8s/kubernetes/server/bin/

[root@master01 bin]# scp kubelet kube-proxy root@192.168.10.20:/opt/kubernetes/bin/
root@192.168.10.20's password: 
kubelet                                100%  168MB  89.6MB/s   00:01    
kube-proxy                             100%   48MB  73.4MB/s   00:00    
[root@master01 bin]# scp kubelet kube-proxy root@192.168.10.30:/opt/kubernetes/bin/
root@192.168.10.30's password: 
kubelet                                100%  168MB 105.7MB/s   00:01    
kube-proxy                             100%   48MB  60.3MB/s   00:00    

在node01节点上部署

1.复制node.zip到/root目录下再解压

解压node.zip,获得kubelet.sh proxy.sh

[root@node01 ~]# unzip node.zip    ## 在宿主机上已下载,拿过来解压
Archive:  node.zip
  inflating: proxy.sh                
  inflating: kubelet.sh        

回到master上

1.拷贝kubeconfig.sh文件进行重命名
[root@master01 k8s]#  mkdir ~/k8s/kubeconfig
[root@master01 k8s]# cd kubeconfig/

[root@master01 kubeconfig]# ls      ##直接从宿主机上复制过来
kubeconfig.sh


2.设置环境变量
[root@master01 kubeconfig]# export PATH=$PATH:/opt/kubernetes/bin/

[root@master01 kubeconfig]# kubectl get cs     ##可以直接调用命令
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
etcd-1               Healthy   {"health":"true"}   
etcd-2               Healthy   {"health":"true"}   
3.生成配置文件
[root@master01 kubeconfig]# bash kubeconfig 192.168.10.10 /root/k8s/k8s-cert/
Cluster "kubernetes" set.
User "kubelet-bootstrap" set.
Context "default" created.
Switched to context "default".
Cluster "kubernetes" set.
User "kube-proxy" set.
Context "default" created.
Switched to context "default".

[root@master01 kubeconfig]# ls  ##新生成了bootstrap.kubeconfig和kube-proxy.kubeconfig
bootstrap.kubeconfig  kubeconfig kube-proxy.kubeconfig
4.拷贝配置文件到node节点
[root@master01 kubeconfig]#  scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.10.20:/opt/kubernetes/cfg/

root@192.168.10.20's password: 
bootstrap.kubeconfig                      100% 2167   508.1KB/s   00:00    
kube-proxy.kubeconfig                     100% 6269     3.8MB/s   00:00    

[root@master01 kubeconfig]#  scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.10.30:/opt/kubernetes/cfg/

root@192.168.10.30's password: 
bootstrap.kubeconfig                       100% 2167   573.4KB/s   00:00    
kube-proxy.kubeconfig                      100% 6269     4.9MB/s   00:00 
5.创建bootstrap角色赋予权限用于连接apiserver请求签名(关键)
[root@master01 kubeconfig]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

clusterrolebinding.rbac.authorization.k8s.io/kubelet-bootstrap created

在node01节点操作

1.启动kubelete服务
[root@node01 ~]# bash kubelet.sh 192.168.10.20
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

[root@node01 ~]# ps aux | grep kube    ##查看进程
……省略部分

 /opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --hostname-override=192.168.10.20 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
root      57316  0.0  0.0 112664   972 pts/0    S+   10:18   0:00 grep --color=auto kube

在node02节点操作

1.启动kubelete服务
[root@node02 ~]#  bash kubelet.sh 192.168.10.30
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

[root@node02 ~]# ps aux | grep kube   ##查看进程
……省略部分

 /opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --hostname-override=192.168.10.30 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
root      57315  0.0  0.0 112660   972 pts/0    S+   10:19   0:00 grep --color=auto kube

再回到master上操作

1.检查到node01节点的请求
[root@master01 kubeconfig]# kubectl get csr
NAME                                                   AGE     REQUESTOR           CONDITION
node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY   3m28s   kubelet-bootstrap   Pending    
node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA   3m20s   kubelet-bootstrap   Pending
##Pending(等待集群给该节点颁发证书),记录下分配给两个节点的编号
## node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY
## node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA
2.给该节点颁发证书
[root@master01 kubeconfig]# kubectl certificate approve node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY

certificatesigningrequest.certificates.k8s.io/node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY approved

[root@master01 kubeconfig]# kubectl certificate approve node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA

certificatesigningrequest.certificates.k8s.io/node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA approved
3.继续查看证书状态
[root@master01 kubeconfig]# kubectl get csr
NAME                                                   AGE     REQUESTOR           CONDITION
node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY   8m6s    kubelet-bootstrap   Approved,Issued
node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA   7m58s   kubelet-bootstrap   Approved,Issued
## Approved,Issued 状态变为被认可,已发布状态(已经被允许加入群集)
4.查看群集节点,成功加入的节点
[root@master01 kubeconfig]# kubectl get node
NAME            STATUS   ROLES    AGE     VERSION
192.168.10.20   Ready    <none>   3m50s   v1.12.3
192.168.10.30   Ready    <none>   3m38s   v1.12.3

到node01节点操作

1.启动proxy服务
[root@node01 ~]# bash proxy.sh 192.168.10.20
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.

[root@node02 ~]# systemctl status kube-proxy.service 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwtjSWXF-1605984203984)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605983674452.png)]

到node01节点操作

1.启动proxy服务
[root@node02 ~]# bash proxy.sh 192.168.10.30

Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.

[root@node02 ~]# systemctl status kube-proxy.service 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-chpmqSOD-1605984203985)(C:\Users\LTP\AppData\Roaming\Typora\typora-user-images\1605983491987.png)]

RYA approved




#### 3.继续查看证书状态

```bash
[root@master01 kubeconfig]# kubectl get csr
NAME                                                   AGE     REQUESTOR           CONDITION
node-csr-2YNOTKwE2nhO3Tw5BzqbgGjbOm2F-LAfikONraRpgHY   8m6s    kubelet-bootstrap   Approved,Issued
node-csr-aB3Un2TRV9mu7aHxCg1O6zbfWN5Uh95sVgtPUSD5RYA   7m58s   kubelet-bootstrap   Approved,Issued
## Approved,Issued 状态变为被认可,已发布状态(已经被允许加入群集)
4.查看群集节点,成功加入的节点
[root@master01 kubeconfig]# kubectl get node
NAME            STATUS   ROLES    AGE     VERSION
192.168.10.20   Ready    <none>   3m50s   v1.12.3
192.168.10.30   Ready    <none>   3m38s   v1.12.3

到node01节点操作

1.启动proxy服务
[root@node01 ~]# bash proxy.sh 192.168.10.20
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.

[root@node02 ~]# systemctl status kube-proxy.service 

[外链图片转存中...(img-iwtjSWXF-1605984203984)]

到node01节点操作

1.启动proxy服务
[root@node02 ~]# bash proxy.sh 192.168.10.30

Created symlink from /etc/systemd/system/multi-user.target.wants/kube-proxy.service to /usr/lib/systemd/system/kube-proxy.service.

[root@node02 ~]# systemctl status kube-proxy.service 

[外链图片转存中...(img-chpmqSOD-1605984203985)]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值