K8S单节点的二进制部署

实验环境:

在这里插入图片描述

在这里插入图片描述

推荐步骤:

一.先配置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  ##查看群集中的节点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值