Kubernetes

6、K8s-Master部署详细流程

Linux · 3月6日 · 2020年

部署apiserver,controller-manager和scheduler在Master节点下操作

1、二进制安装包下载地址,下载存放位置/service/scripts

[root@k8s-master scripts]# wget https://dl.k8s.io/v1.16.0/kubernetes-server-linux-amd64.tar.gz

2、解压并且迁移以下命令内容

[root@k8s-master bin]# pwd
/service/scripts/kubernetes/server/bin
[root@k8s-master bin]# cp kube-apiserver kube-controller-manager kubectl kube-scheduler /opt/etcd/bin/

3、设置kube-apiserver.conf、kube-controller-manager.conf、kube-scheduler.confpei配置文件

  • kube-apiserver.conf

KUBE_APISERVER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/etcd/logs \
--etcd-servers=https://192.168.3.63:2379,https://192.168.3.64:2379,https://192.168.3.65:2379,https://192.168.3.66:2379 \
--bind-address=192.168.3.63 \
--secure-port=6443 \
--advertise-address=192.168.3.63 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--enable-bootstrap-token-auth=true \
--token-auth-file=/opt/etcd/cfg/token.csv \
--service-node-port-range=30000-32767 \
--kubelet-client-certificate=/opt/etcd/ssl/server.pem \
--kubelet-client-key=/opt/etcd/ssl/server-key.pem \
--tls-cert-file=/opt/etcd/ssl/server.pem  \
--tls-private-key-file=/opt/etcd/ssl/server-key.pem \
--client-ca-file=/opt/etcd/ssl/ca.pem \
--service-account-key-file=/opt/etcd/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 \
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/opt/etcd/logs/k8s-audit.log"

解:

KUBE_APISERVER_OPTS="--logtostderr=false \   输出日志
--v=2 \                                      日志级别
--log-dir=                                   日志存储路径           
--etcd-servers=                              etcd节点的IP通信地址
--bind-address=                              当前绑定的内网IP监听的地址   
--secure-port=                               基于HPPTS开放端口
--advertise-address                          内网通告地址,让其他node节点地址通信
--allow-privileged                           允许创建容器时所有主机赋予的权限                        
--service-cluster-ip-range                   客户端                  
--enable-admission-plugins                   启用准入控制插件 (LimitRanger资源配额的限制)
--authorization-mode                         指定的用户授权模式
--enable-bootstrap-token-auth                启用bootstrap/token的认证     
--token-auth-file                            token的认证存放的位置
--service-node-port-range                    端口暴露的范围30000-32767 
--kubelet-client-certificate                 客户端kebelet公钥认证证书,kubelet属于node节点上的Agent 
--kubelet-client-key                         客户端kebelet私钥钥认证证书, kubelet属于node节点上的Agent 
--tls-cert-file                              属于APiserver认证通信的CA证书的公钥                                 
--tls-private-key-file                       属于APiserver认证通信的CA证书的私钥
--client-ca-file                             属于APiserver认证通信的CA证书的公钥
--service-account-key-file                   属于APiserver认证通信的CA证书KEY的私钥
--etcd-cafile                                属于链接ETCD认证通信的的CA证书的公钥
--etcd-certfile                              属于ETCD认证通信的的CA证书server公钥
--etcd-keyfile                               属于ETCD认证通信的的CA证书server私钥
--audit-log-maxage                           日志的审计
--audit-log-maxbackup                        日志备份的大小
--audit-log-maxsize                          日志的大小
--audit-log-path                             日志的路径

  • kube-controller-manager.conf

KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/etcd/logs \
--leader-elect=true \
--master=127.0.0.1:8080 \
--address=127.0.0.1 \
--allocate-node-cidrs=true \
--cluster-cidr=10.244.0.0/16 \
--service-cluster-ip-range=10.0.0.0/24 \
--cluster-signing-cert-file=/opt/etcd/ssl/ca.pem \
--cluster-signing-key-file=/opt/etcd/ssl/ca-key.pem  \
--root-ca-file=/opt/etcd/ssl/ca.pem \
--service-account-private-key-file=/opt/etcd/ssl/ca-key.pem \
--experimental-cluster-signing-duration=87600h0m0s"

详解:

KUBE_CONTROLLER_MANAGER_OPTS             输出日志
--v=2                                    日志级别
--log-dir                                日志路径
--leader-elect                           高可用集群选举
--master                                 链接本地的apiserver的默认IP地址与端口
--address                                监听的本地地址                        
--allocate-node-cidrs                    允许安装cni的插件, 能够分配到的IP地址   
--cluster-cidr                           集群pod节点的IP端,要与CNI的插件IP端一样
--service-cluster-ip-range               server的IP范围
--cluster-signing-cert-file              集群签名的CA证书公钥路径
--cluster-signing-key-file               集群前面的CA证书私钥路径
--root-ca-file                           用于签署server-account的CA公钥证书
--service-account-private-key-file       用于签署server-account的CA私钥证书
--experimental-cluster-signing-duration  为每个node节点签发kubelt的签发的过期时间
  • kube-scheduler.conf

KUBE_SCHEDULER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/etcd/logs \
--leader-elect \
--master=127.0.0.1:8080 \
--address=127.0.0.1"

详解

KUBE_SCHEDULER_OPTS   输出日志
--v=2                 日志级别                  
--log-dir             日志路径 
--leader-elect        集群选举  
--master              链接APIServer的本地IP与端口
--address             监听本地的地址

二、启用TLS Bootstrapping,为kubelet TLS Bootstrapping 授权:

  • 生成token.csv命令如下

#创建TLS Bootstrapping Token
export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x |tr -d ' ')
cat >token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
  • 生成后结果token.csv

[root@k8s-master cfg]# cat token.csv 
c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"

详解:

c47ffb939f5ca36231d9e3121a252940 token
kubelet-bootstrap                           用户
10001                                            UID
system:node-bootstrapper             用户组

  • Master主机给kubelet-bootstrap用户授权:

vim/vim

&nbsp;

三、配置开机文件,以下三个文件迁移到/usr/lib/systemd/system/下即可

1、kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/opt/etcd/cfg/kube-apiserver.conf
ExecStart=/opt/etcd/bin/kube-apiserver $KUBE_APISERVER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

2、 kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/opt/etcd/cfg/kube-controller-manager.conf
ExecStart=/opt/etcd/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

3、kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=/opt/etcd/cfg/kube-scheduler.conf
ExecStart=/opt/etcd/bin/kube-scheduler $KUBE_SCHEDULER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

 

四、设置开机自启动

systemctl enable kube-apiserver.service kube-controller-manager.service kube-scheduler.service 

五、添加命令到环境变量

cp -a /opt/etcd/bin/* /usr/local/bin/

六、检查是否成功,提示以下信息Master主节点成功

[root@k8s-master bin]# kubectl get cs
NAME                 AGE
controller-manager   <unknown>
scheduler            <unknown>
etcd-0               <unknown>
etcd-2               <unknown>
etcd-3               <unknown>
etcd-1               <unknown>

 

0 条回应