kubernetes高可用集群部署 - 4. master集群
1. 检查环境
请先确保前面的环境正常, 再进行这一步, 否则出现的各种错误很难定位
检查证书环境
ls /etc/kubernetes/ssl
检查kubectl
工具类环境
检查当前用户的信息
检查服务环境
ll /opt/k8s/bin
2. 配置和启动kube-apiserver
vi /usr/lib/systemd/system/kube-apiserver.service
##############################################
[Unit]
Description=Kubernetes API Service
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=etcd.service
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/apiserver
ExecStart=/opt/k8s/bin/kube-apiserver \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_ETCD_SERVERS \
$KUBE_API_ADDRESS \
$KUBE_API_PORT \
$KUBELET_PORT \
$KUBE_ALLOW_PRIV \
$KUBE_SERVICE_ADDRESSES \
$KUBE_ADMISSION_CONTROL \
$KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
##############################################
配置config
vi /etc/kubernetes/config
##############################################
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=true"
KUBE_MASTER="--master=http://192.168.1.100:8080"
##############################################
--master 配置成自己的
8080
端口就可以了
vi /etc/kubernetes/apiserver
##############################################
KUBE_API_ADDRESS="--advertise-address=192.168.1.100 --bind-address=192.168.1.100 --insecure-bind-address=192.168.1.100"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.50:2379,http://192.168.1.51:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=ServiceAccount,NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
KUBE_API_ARGS="--authorization-mode=RBAC --runtime-config=rbac.authorization.k8s.io/v1beta1 --kubelet-https=true --experimental-bootstrap-token-auth --token-auth-file=/etc/kubernetes/token.csv --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem --tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem --client-ca-file=/etc/kubernetes/ssl/ca.pem --service-account-key-file=/etc/kubernetes/ssl/ca-key.pem --enable-swagger-ui=true --apiserver-count=3 --audit-log-maxage=30 --audit-log-maxbackup=3 --audit-log-maxsize=100 --audit-log-path=/var/lib/audit.log --event-ttl=1h"
##############################################
KUBE_API_ADDRESS
: 注意绑定的IP地址 不要 写成127.0.0.1
, 要写成具体的IP地址(如果是阿里云的经典网络, 最好选择内网地址
, 提升网络传输)KUBE_ETCD_SERVERS
: 注意ETCD
集群地址写法KUBE_SERVICE_ADDRESSES
: 这个统一固定就好, 要和前面生成证书所指定的地址段一致
# 保存配置文件, 并启动kube-apiserver
systemctl daemon-reload
systemctl enable kube-apiserver
systemctl start kube-apiserver
systemctl status kube-apiserver -l
3. 配置和启动kube-controller-manager
vi /usr/lib/systemd/system/kube-controller-manager.service
##############################################
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/opt/k8s/bin/kube-controller-manager \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_MASTER \
$KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
##############################################
vi /etc/kubernetes/controller-manager。
##############################################
KUBE_CONTROLLER_MANAGER_ARGS="--address=127.0.0.1 --service-cluster-ip-range=10.254.0.0/16 --cluster-name=kubernetes --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem --service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem --root-ca-file=/etc/kubernetes/ssl/ca.pem --leader-elect=true"
##############################################
- --cluster-signing-* 指定的证书和私钥文件用来签名为 TLS BootStrap 创建的证书和私钥;
- --root-ca-file 用来对 kube-apiserver 证书进行校验,指定该参数后,才会在Pod 容器的 ServiceAccount 中放置该 CA 证书文件;
- --address 值必须为 127.0.0.1,因为当前 kube-apiserver 期望 scheduler 和 controller-manager 在同一台机器
# 保存配置并启动
systemctl daemon-reload
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl status kube-controller-manager -l
4. 配置和启动kube-scheduler
vi /usr/lib/systemd/system/kube-scheduler.service
##############################################
[[Unit]
Description=Kubernetes Scheduler Plugin
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/opt/k8s/bin/kube-scheduler \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_MASTER \
$KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
##############################################
vi /etc/kubernetes/scheduler
##############################################
KUBE_SCHEDULER_ARGS="--leader-elect=true --address=127.0.0.1"
##############################################
- --address 值必须为 127.0.0.1,因为当前 kube-apiserver 期望 scheduler 和 controller-manager 在同一台机器;
# 保存配置并启动
systemctl daemon-reload
systemctl enable kube-scheduler
systemctl start kube-scheduler
systemctl status kube-scheduler -l
5. 验证master
节点功能
如果上述配置好, 会新增加4个配置文件
# 查看节点状态
kubectl get componentstatuses
# 查看端口情况
netstat -nltp
其他几台
master
也需要按照上述相同的配置, 只需要把相对应的ip地址
换成自己的, 记住, 证书一定要相同
6. 配置SLB
配置SLB
的目的是为了保证kube-apiserver
接口可用性, 所以当node
节点连接master
接口时, 通过SLB
转发, 而不是单独指定一台master
服务器. 这样当其中一台master
挂掉时, SLB
会将请求转发到另一台, 由于两台master的证书配置一致, 从而达到master
高可用性.
这里采用阿里云的
SLB
, 或者大家按照自身需要, 准备一台服务器安装Nginx
.
创建SLB, 加入两台master
服务器
配置端口映射
这里将SLB的
6443
转向8080
端口, 另外6443
端口配置HTTPS
协议. 这个时候, 按要求把公钥/etc/kubernetes/ssl/kubernetes.pem
和私钥/etc/kubernetes/ssl/kubernetes-key.pem
分别推送到SLB
, 以保证6443
端口的安全性
验证SLB配置成功, 在浏览器中访问 (这里会报安全问题, 不理会, 因为证书是我们自己生成的, 直接访问)
https://192.168.1.88:6443
断开其中一台继续访问
systemctl stop kube-apiserver
高可用部署系列
Kubernetes高可用集群部署 - 1. 生成证书
Kubernetes高可用集群部署 - 2. ETCD集群
Kubernetes高可用集群部署 - 3. kubectl工具配置
-> Kubernetes高可用集群部署 - 4. master集群
Kubernetes高可用集群部署 - 5. node集群
Kubernetes高可用集群部署 - 6. DNS配置
相关服务
Kubernetes配置secret拉取私仓镜像
Kubernetes目录挂载
Kubernetes Ingress使用
Kubernetes限制pod的cpu和内存
Helm部署Kubernetes应用
Kubernetes监控(Heapster)
Kubernetes监控(coreos/prometheus-operator)