kubernetes高可用集群部署 - 4. master集群

2017-09-28  本文已影响3563人  殷临风

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)

上一篇下一篇

猜你喜欢

热点阅读