实验环境:
推荐步骤:
一.先配置ETCD(master端和两个node端都需要配置etcd)
master端:
1.制作ETCD证书前期的环境搭建
[root@localhost ~]# hostnamectl set-hostname master ##修改主机名
[root@localhost ~]# su
[root@master ~]# setenforce 0 ##关闭防护系统
[root@master ~]# systemctl stop firewalld ##关闭防火墙
[root@master ~]# mkdir k8s ##创建k8s的目录
[root@master ~]# cd k8s/
[root@master k8s]# ls
etcd-cert.sh etcd.sh ##将etcd的证书脚本和etcd的配置脚本拷过来
[root@master k8s]# mkdir etcd-cert ##创建存放证书的目录
[root@master k8s]# mv etcd-cert.sh etcd-cert ##将证书脚本放到目录中
[root@master k8s]# mkdir cfssl ##创建制作证书的工具目录
[root@master k8s]# cd cfssl/
[root@master cfssl]# ls ##制作证书的三个文件从宿主机中拷过来
cfssl cfssl-certinfo cfssljson
[root@master cfssl]# chmod +x * ##增加执行权限
[root@master cfssl]# mv * /usr/local/bin/ ##将三个文件让系统命令能够识别
[root@master cfssl]# ls /usr/local/bin/
cfssl cfssl-certinfo cfssljson
##cfssl 生成证书工具 ;cfssljson通过传入json文件生成证书;cfssl-certinfo查看证书信息
2.开始制作证书
CA证书的制作
[root@master k8s]# cd etcd-cert/
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h" ##证书的时效:10年
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth", ##服务端身份验证
"client auth" ##客户端身份验证
]
}
}
}
}
EOF
3.配置ca证书的签名
[root@master etcd-cert]# cat > ca-csr.json <<EOF
cat > ca-csr.json <<EOF
{
"CN": "etcd CA",
"key": {
"algo": "rsa", ##用的rsa非对称密钥的加密方式
"size": 2048 ##加密长度
},
"names": [
{
"C": "CN",
"L": "Beijing", ##名称
"ST": "Beijing"
}
]
}
EOF
4.生产证书,生成ca-key.pem ca.pem
[root@master etcd-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
5.CA证书制作完毕后,开始制作群集的服务端证书,指定etcd三个节点之间的通信验证
[root@master etcd-cert]# cat > server-csr.json <<EOF
cat > server-csr.json <<EOF
{
"CN": "etcd",
"hosts": [
"192.168.148.138", ##master端的IP地址
"192.168.148.139", ##node01端IP地址
"192.168.148.140" ##node02端的IP地址
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing", ##这边的名称要和前面的CA证书名称要对应
"ST": "BeiJing"
}
]
}
EOF
6.配置生成ETCD的服务端证书和密钥(基于之前CA证书的帮助)
[root@master etcd-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
7.安装配置ETCD
[root@master k8s]# tar zxvf etcd-v3.3.10-linux-amd64.tar.gz ##解压工具包
[root@master k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p ##创建Etcd的配置文件目录;命令目录;证书目录
[root@master k8s]# mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/ ##将etcd命令文件放到创建的命令目录中
[root@master k8s]# cp etcd-cert/*.pem /opt/etcd/ssl/ ##将证书文件拷贝到新创建的证书目录下
[root@master k8s]# bash etcd.sh etcd01 192.168.148.138 etcd02=https://192.168.148.139:2380,etcd03=https://192.168.148.140:2380 ##运行etcd
这时终端会卡住,是因为只配置了一台节点,别的节点还没有加入进来。打开另外一个终端会发现etcd进程已经开启
- 2380是etcd群集内部的通讯端口
- 2379是etcd对外开放的端口
[root@master k8s]# scp -r /opt/etcd/ root@192.168.148.139:/opt/ ##将master节点上ETCD的文件拷贝到node01的节点上
[root@master k8s]# scp -r /opt/etcd/ root@192.168.148.140:/opt/ ##将master节点上ETCD的文件拷贝到node02的节点上
8.将启动服务的脚本拷贝其他node节点
[root@master k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.148.139:/usr/lib/systemd/system/ ##拷贝到node01节点上
[root@master k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.148.140:/usr/lib/systemd/system/ ##拷贝到node02节点上
Node01节点配置
修改etcd的配置文件
[root@localhost ~]# hostnamectl set-hostname node01 ##修改主机名
[root@node01 ~]# systemctl stop firewalld.service ##关闭防火墙
[root@node01 ~]# setenforce 0 ##关闭防护系统
[root@node01 etcd]# vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02" ##这边改为etcd02为区分
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.148.139:2380" ##修改为本机的IP地址
ETCD_LISTEN_CLIENT_URLS="https://192.168.148.139:2379" ##修改为本机的IP地址
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.148.139:2380" ##修改为本机的IP地址
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.148.139:2379" ##修改为本机的IP地址
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.148.138:2380,etcd02=https://192.168.148.139:2380,etcd03=https://192.168.148.140:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@node01 etcd]# systemctl start etcd ##配置好后启动etcd服务
修改mode02节点上的ETCD文件,修改三处
[root@node02 etcd]# systemctl start etcd ##启动服务
9.三个节点都配置完成后,检查ETCD的集群状态
[root@master etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.148.138:2379,https://192.168.148.139:2379,https://192.168.148.140:2379" cluster-health ##这边注意一个点,因为是在etcd-cert的目录下,所以用etcdctl的命令时,要跟绝对路径,后面的证书不需要,因为etcd-cert目录下就存放了这些目录文件
二.docker引擎部署(这边安装启动docker的步骤参考之前的博客)
两台node节点启动docker
[root@node01 etcd]# systemctl start docker
[root@node02 etcd]# systemctl start docker
三.flannel网络配置
在master端配置
1.写入分配的子网段到ETCD中,供flannel使用
[root@master etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.148.138:2379,https://192.168.148.139:2379,https://192.168.148.140:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}
[root@master etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.148.138:2379,https://192.168.148.139:2379,https://192.168.148.140:2379" get /coreos.com/network/config ##查看写入的信息
2.将master节点上的flannel组件的工具包拷贝到其他两个节点上(只需要部署在node节点即可)
[root@master etcd-cert]# cd ..
[root@master k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz root@192.168.148.139:/root ##拷贝到139的家目录下
[root@master k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz root@192.168.148.140:/root ##拷贝到140的家目录下
3.所有node节点操作解压,这边步骤仅举例node01
[root@node01 ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz
4.创建kubernetes的证书;配置文件;命令的目录
[root@node01 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@node01 ~]# mv mk-docker-opts.sh /opt/kubernetes/bin/
[root@node01 ~]# mv flanneld /opt/kubernetes/bin/
Node02节点上也是一样的步骤
[root@node01 ~]# vim flannel.sh ##编写flannel的启动脚本
#!/bin/bash
ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"} ##因为加入了群集,所以地址指向自己
cat <<EOF >/opt/kubernetes/cfg/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \
-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
[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
Node02节点也是相同的编写
5.开启flannel网络功能,指明etcd群集地址,被flannel所启用,要被记录在etcd当中的,两个node节点都需要启动,这边举例node01
[root@node01 ~]# bash flannel.sh https://192.168.148.138:2379,https://192.168.148.139:2379,https://192.168.148.140:2379
6.配置docker连接flannel
[root@node01 ~]# vim /usr/lib/systemd/system/docker.service
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=/run/flannel/subnet.env ##添加环境变量
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock ##启动方式添加变量
[root@node01 ~]# cat /run/flannel/subnet.env ##node01查看是否有subnet的文件
DOCKER_OPT_BIP="--bip=172.17.24.1/24" ##flannel的网关
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450" ##传输单元
DOCKER_NETWORK_OPTIONS=" --bip=172.17.24.1/24 --ip-masq=false --mtu=1450" ##bip指定启动时的子网
Node02节点也有了flannel信息,网段是172.17.42网段的
重启docker服务,查看flannel网络
[root@node01 ~]# systemctl daemon-reload
[root@node01 ~]# systemctl restart docker
[root@node01 ~]# ifconfig
Node02的网卡信息
测试ping通对方docker0网卡 证明flannel起到路由作用
[root@node01 ~]# docker run -it centos:7 /bin/bash ##node01运行centos7的容器
[root@de80c36f4856 /]# yum -y install net-tools ##这时已经进入容器里面了,下载查看网络命令
同样的步骤在node02上也运行一个centos:7的容器,下载查看网络的命令
Node01节点上的centos:7容器去ping172.17.42.2(node02节点上容器的IP地址),测试连接是否成功
四:部署master组件
1.在master上操作,api-server生成证书,将工具包拖到k8s的目录下
[root@master k8s]# mkdir master
[root@master k8s]# mv master.zip master
[root@master k8s]# cd master/
[root@master master]# unzip master.zip ##解压master工具包
会有三个脚本文件
[root@master master]# chmod +x controller-manager.sh
[root@master master]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p ##创建k8s的工作目录(同样也是那三个文件)
[root@master master]# cd ..
[root@master k8s]# mkdir k8s-cert ##创建生成k8s证书的目录
将生成k8s证书脚本放到这个目录下
[root@master k8s]# cd k8s-cert/
[root@master k8s-cert]# vim k8s-cert.sh
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
cat > ca-csr.json <<EOF ##生成CA证书的签名
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca - ##生成CA证书和CA密钥
#-----------------------
cat > server-csr.json <<EOF ##生成服务端的证书签名
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1",
"127.0.0.1",
"192.168.148.138", ##指明master1的地址
"192.168.148.137", ##指明多节点master2的地址(为后面做多节点提前生成证书)
"192.168.148.100", ##虚拟IP地址(双机热备)
"192.168.148.135", ##nginx反向代理master端的地址
"192.168.148.136", ##nginx反向代理backup端的地址
"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
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server ##生成服务端证书和服务端的密钥
#-----------------------
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"
}
]
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin ##生成管理员证书
#-----------------------
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
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy ##生成代理端的证书(为后面kubelet操作node节点做准备)
[root@master k8s-cert]# bash k8s-cert.sh ##直接执行脚本生成证书
[root@master k8s-cert]# cp ca*pem server*pem /opt/kubernetes/ssl/ ##将CA证书和服务端的证书放到ssl存证书的目录下
[root@master k8s-cert]# ls /opt/kubernetes/ssl/
ca-key.pem ca.pem server-key.pem server.pem
2.解压kubernetes压缩包
[root@master k8s]# tar zxvf kubernetes-server-linux-amd64.tar.gz
[root@master k8s]# cd kubernetes/server/bin/
3.复制命令关键文件
[root@master bin]# cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/ ##其中kubectl是命令文件,K8S当中的指令是基于kubectl的;其他三个都是master端的组件
4.配置token令牌
[root@master bin]# cd /root/k8s/
[root@master k8s]# head -c 16 /dev/urandom | od -An -t x | tr -d '' ##先随机生成一串序列值
c2ced056 99c0617b 8a8f3fff 6b53e4a1
root@master k8s]# vim /opt/kubernetes/cfg/token.csv
c2ced05699c0617b8a8f3fff6b53e4a1,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
##kubelet-bootstrap:用户名(node要用这个用户身份来授权允许加入k8s的集群)
10001:用户id
system:kubelet-bootstrap:用户角色
5.二进制文件,token,证书都准备好,开启apiserver
[root@master k8s]# cd master/
[root@master master]# vim apiserver.sh
#!/bin/bash
MASTER_ADDRESS=$1 ##位置变量:master端地址
ETCD_SERVERS=$2 ##集群地址
cat <<EOF >/opt/kubernetes/cfg/kube-apiserver ##配置文件
KUBE_APISERVER_OPTS="--logtostderr=true \\
--v=4 \\
--etcd-servers=${ETCD_SERVERS} \\
--bind-address=${MASTER_ADDRESS} \\
--secure-port=6443 \\ ##k8s中https的地址
--advertise-address=${MASTER_ADDRESS} \\
--allow-privileged=true \\
--service-cluster-ip-range=10.0.0.0/24 \\
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \\
--authorization-mode=RBAC,Node \\ ##k8s的安全框架
--kubelet-https=true \\
--enable-bootstrap-token-auth \\
--token-auth-file=/opt/kubernetes/cfg/token.csv \\ ##指明token角色身份验证
--service-node-port-range=30000-50000 \\ ##node加入后被分配到的端口号
--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 \\ ##client端的CA证书
--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"
EOF
cat <<EOF >/usr/lib/systemd/system/kube-apiserver.service ##启动脚本
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable kube-apiserver
systemctl restart kube-apiserver
[root@master master]# bash apiserver.sh 192.168.148.138 https://192.168.148.138:2379,https://192.168.148.139:2379,https://192.168.148.140:2379 ##启动脚本,生成文件
查看api服务是否开启
查看端口是否是6443
这时可以查看8080端口,发现http协议的端口也开启了
6.api组件启动后,启动scheduler服务
[root@master kubernetes]# cd /root/k8s/master/
[root@master master]# vim scheduler.sh
#!/bin/bash
MASTER_ADDRESS=$1
cat <<EOF >/opt/kubernetes/cfg/kube-scheduler
KUBE_SCHEDULER_OPTS="--logtostderr=true \\
--v=4 \\
--master=${MASTER_ADDRESS}:8080 \\ ##这边地址指向自己
--leader-elect" ##master的身份
EOF
cat <<EOF >/usr/lib/systemd/system/kube-scheduler.service
[Unit] ##描述信息
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler ##配置文件
ExecStart=/opt/kubernetes/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS ##启动脚本
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable kube-scheduler
systemctl restart kube-scheduler
[root@master master]# ./scheduler.sh 127.0.0.1 ##启动组件,地址指向自己
[root@master master]# ps aux | grep scheduler ##查看进程是否开启
8.启动控制器controller-manager组件
[root@master master]# ./controller-manager.sh 127.0.0.1
[root@master master]# /opt/kubernetes/bin/kubectl get cs ##查看master 节点状态
其中kubectl get cs ##查看节点状况的
五.node端配置
1.把 kubelet、kube-proxy拷贝到node节点上去
[root@master master]# cd /root/k8s/kubernetes/server/bin/ ##切换到放命令的目录下
[root@master bin]# scp kubelet kube-proxy root@192.168.148.139:/opt/kubernetes/bin/ ##拷贝到node01的节点上
[root@master bin]# scp kubelet kube-proxy root@192.168.148.140:/opt/kubernetes/bin/ ##拷贝到node02的节点上
2.nod01节点操作(复制node.zip到/root目录下再解压)
[root@node01 ~]# unzip node.zip
Node2节点也是相同步骤,先解压工具包
回到master节点上配置前置环境,为了能让后面的node节点添加k8s集群
[root@master bin]# cd /root/k8s/
[root@master k8s]# mkdir kubeconfig
[root@master k8s]# cd kubeconfig/
拷贝kubeconfig.sh文件进行重命名
[root@master kubeconfig]# ls
kubeconfig.sh
[root@master kubeconfig]# mv kubeconfig.sh kubeconfig ##修改名字
[root@master kubeconfig]# vim kubeconfig
APISERVER=$1 ##设置地址
SSL_DIR=$2 ##ssl目录
# 创建kubelet bootstrapping kubeconfig
export KUBE_APISERVER="https://$APISERVER:6443" ##告诉node找哪个api-server提交证书请求
# 设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=$SSL_DIR/ca.pem \ ##用到的证书
--embed-certs=true \
--server=${KUBE_APISERVER} \ ##指定服务端的IP
--kubeconfig=bootstrap.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
--token=c2ced05699c0617b8a8f3fff6b53e4a1 \ ##设置客户端认证参数;这边序列号是token文件里的序列号
--kubeconfig=bootstrap.kubeconfig
# 设置上下文参数
kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
# 设置默认上下文
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
#----------------------
# 创建kube-proxy kubeconfig文件
kubectl config set-cluster kubernetes \
--certificate-authority=$SSL_DIR/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy \
--client-certificate=$SSL_DIR/kube-proxy.pem \
--client-key=$SSL_DIR/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
设置环境变量(可以写入到/etc/profile中)
[root@master kubeconfig]# vim /etc/profile
unset i
unset -f pathmunge
export PATH=$PATH:/opt/kubernetes/bin/ ##底行加入环境变量
[root@master kubeconfig]# source /etc/profile ##声明环境变量
生成配置文件
[root@master kubeconfig]# bash kubeconfig 192.168.148.138 /root/k8s/k8s-cert/
拷贝配置文件到node节点
[root@master kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.148.139:/opt/kubernetes/cfg/
[root@master kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.148.140:/opt/kubernetes/cfg/
创建bootstrap角色赋予权限用于连接apiserver请求签名(关键)
[root@master kubeconfig]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
在node01节点上操作
[root@node01 ~]# bash kubelet.sh 192.168.148.139 ##加载kubelet的脚本启动服务
回到master上操作,检查到node01节点的请求
[root@master kubeconfig]# kubectl certificate approve node-csr-S9lhT4REXOsx_MzbLpsMcHsTo24WnHQPeanGfED-c6U ##配置同意node01的请求,颁发证书
查看群集节点,成功加入node01节点
[root@master kubeconfig]# kubectl get node ##查看群集节点
在node01节点操作,启动proxy服务
[root@node01 ~]# bash proxy.sh 192.168.148.139
查看发现proxy服务开启
[root@node01 ~]# systemctl status kubelet.service ##查看服务状态
Node01节点配置好后,在node01节点操作,把现成的/opt/kubernetes目录复制到其他节点进行修改即可
[root@node01 ~]# scp -r /opt/kubernetes/ root@192.168.148.140:/opt/ ##将整个目录复制过去
[root@node01 ~]# scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@192.168.148.140:/usr/lib/systemd/system/ ##把kubelet,kube-proxy的service文件拷贝到node2中
在node02上操作,进行修改,首先删除复制过来的证书,等会node02会自行申请证书
[root@node02 ~]# cd /opt/kubernetes/ssl/
[root@node02 ssl]# ls
kubelet-client-2020-09-29-19-56-49.pem kubelet-client-current.pem kubelet.crt kubelet.key
[root@node02 ssl]# rm -rf * ##将node01的证书删除
修改配置文件kubelet kubelet.config kube-proxy(三个配置文件)
[root@node02 ssl]# cd ../cfg/
[root@node02 cfg]# vim kubelet
[root@node02 cfg]# vim kubelet.config
[root@node02 cfg]# vim kube-proxy
启动服务
[root@node02 cfg]# systemctl start kubelet.service
[root@node02 cfg]# systemctl enable kubelet.service
[root@node02 cfg]# systemctl start kube-proxy.service
[root@node02 cfg]# systemctl enable kube-proxy.service
在master上操作查看请求
[root@master kubeconfig]# kubectl certificate approve node-csr-hjPUuOSmFZ_SUL_Yg4iWxUMxA3AZY-TfACkJdTERN60
[root@master kubeconfig]# kubectl get node ##查看群集中的节点