赞
踩
目录
在上一篇文章中,就已经完成了二进制k8s集群部署的搭建,但是单机master并不适用于企业的实际运用(因为单机master中,仅仅只有一台master作为节点服务器的调度指挥,一旦宕机。就意味着整个集群的瘫痪,所以成熟的k8s的集群一定要考虑到master的高可用。)
企业的运用一般至少存在两台master及其以上的部署(一般都是三台),本次将根据前面的部署,再添加一台master(三个master或者更多,也可以根据本次添加步骤重复添加)。添加master后,我们会将借助keepalived+nginx的架构,来实现高可用的master【也可以使用haproxy+keepalived或则是keepalived+lvs(不推荐,步骤过于复杂)】
除此之外,我们还将搭建出k8s的ui管理界面
mater节点 | ||
mater01 | 192.168.80.7 | kube-apiserver kube-controller-manager kube-scheduler |
master02 | 192.168.80.17 | kube-apiserver kube-controller-manager kube-scheduler |
node节点 | ||
node01 | 192.168.80.11 | kubelet kube-proxy docker (容器引擎) |
node02 | 192.168.80.12 | kubelet kube-proxy docker (容器引擎) |
etcd cluster集群 | ||
etcd节点1 | 192.168.80.7(mater01) | etcd |
etcd节点2 | 192.168.80.11(node01) | etcd |
etcd节点3 | 192.168.80.12(node02) | etcd |
load balance(高可用调度器) | ||
主调度器 | 192.168.80.13 | nginx,keepalived |
从调度器 | 192.168.80.16 | nginx,keepalived |
架构说明:
node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver。简而言之,node节只能有一个master来领导。
kubelet和kube-proxy是通过kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server参数进行对接 master节点的。
所以在多master节点的环境下,需要有nginx负载均衡器来进行调度,而且需要进行keepalived高可用的构建(主从两个节点) ,防止主节点宕机导致整个k8s集群的不可用。
- 从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
-
- scp -r /opt/etcd/ root@192.168.80.17:/opt/
- scp -r /opt/kubernetes/ root@192.168.80.17:/opt/
- scp -r /root/.kube root@192.168.80.17:/root
- scp -r /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.80.17:/usr/lib/systemd/system/
- 修改master02配置文件kube-apiserver中的IP
- vim /opt/kubernetes/cfg/kube-apiserver
-
- KUBE_APISERVER_OPTS="--logtostderr=false \
- --v=2 \
- --log-dir=/opt/kubernetes/logs \
- --etcd-servers=https://192.168.80.7:2379,https://192.168.80.11:2379,https://192.168.80.12:2379 \
- --bind-address=192.168.80.17 \
- --secure-port=6443 \
- --advertise-address=192.168.80.17 \
- ......
在 master02 节点上启动各服务并设置开机自启
systemctl enable --now kube-apiserver.service
systemctl enable --now kube-controller-manager.service
systemctl enable --now kube-scheduler.service
查看node节点状态
ln -s /opt/kubernetes/bin/* /usr/local/bin/
kubectl get nodes
kubectl get nodes -o wide#-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
//此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来
- //配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
- ##### 在lb01、lb02节点上操作 #####
- //配置nginx的官方在线yum源,配置本地nginx的yum源 (注意 epel源下载的 nginx 不支持stream)
- cat > /etc/yum.repos.d/nginx.repo << 'EOF'
- [nginx]
- name=nginx repo
- baseurl=http://nginx.org/packages/centos/7/$basearch/
- gpgcheck=0
- EOF
-
- yum install nginx -y
-
- //修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
- vim /etc/nginx/nginx.conf
- events {
- worker_connections 1024;
- }
-
- #添加
- stream {
- log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
-
- access_log /var/log/nginx/k8s-access.log main;
-
- upstream k8s-apiserver {
- server 192.168.80.7:6443;
- server 192.168.80.17:6443;
- }
- server {
- listen 6443;
- proxy_pass k8s-apiserver;
- }
- }
-
- http {
- ......
-
-
- //检查配置文件语法
- nginx -t
-
- //启动nginx服务,查看已监听6443端口
- systemctl start nginx
- systemctl enable nginx
- netstat -natp | grep nginx

- //部署keepalived服务
-
- yum install keepalived -y
-
- //修改keepalived配置文件
- vim /etc/keepalived/keepalived.conf
-
- ! Configuration File for keepalived
-
- global_defs {
- # 接收邮件地址
- notification_email {
- acassen@firewall.loc
- failover@firewall.loc
- sysadmin@firewall.loc
- }
- # 邮件发送地址
- notification_email_from Alexandre.Cassen@firewall.loc
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id NGINX_MASTER #lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUP
- vrrp_skip_check_adv_addr
- #vrrp_strict #这里要注释
- vrrp_garp_interval 0
- vrrp_gna_interval 0
- }
-
- #添加一个周期性执行的脚本
- vrrp_script check_nginx {
- script "/etc/nginx/check_nginx.sh" #指定检查nginx存活的脚本路径
- }
-
- vrrp_instance VI_1 {
- state MASTER #lb01节点的为 MASTER,lb02节点的为 BACKUP
- interface ens33 #指定网卡名称 ens33
- virtual_router_id 51 #指定vrid,两个节点要一致
- priority 100 #lb01节点的为 100,lb02节点的为 90
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.80.100/24 #指定 VIP
- }
- track_script {
- check_nginx #指定vrrp_script配置的脚本
- }
- }
-
-
-
- //创建nginx状态检查脚本
- vim /etc/nginx/check_nginx.sh
- #!/bin/bash
- #egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程ID,即脚本运行的当前进程ID号
- count=$(ps -ef | grep nginx | egrep -cv "grep|$$")
-
- if [ "$count" -eq 0 ];then
- systemctl stop keepalived
- fi
-
-
- chmod +x /etc/nginx/check_nginx.sh
-
- scp /etc/keepalived/keepalived.conf root@192.168.80.16:/etc/keepalived/keepalived.conf
-
- scp /etc/nginx/check_nginx.sh root@192.168.80.16:/etc/nginx/check_nginx.sh
-
-
- 注意另外一台keepalive配置也要进行修改(需改内容已经用注释提示)

//启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
systemctl start keepalived
systemctl enable keepalived
ip a #查看VIP是否生成
- 关闭主节点的nginx服务,模拟故障,测试keepalived
-
- #关闭主节点lb01的Nginx服务,模拟宕机,观察VIP是否漂移到备节点
- systemctl stop nginx
- ip addr
- systemctl status keepalived #此时keepalived被脚本杀掉了
-
- #备节点查看是否生成了VIP
- ip addr #此时VIP漂移到备节点lb02
-
-
-
-
- #恢复主节点
- systemctl start nginx #先启动nginx
- systemctl start keepalived #再启动keepalived
- ip addr

- //修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
- cd /opt/kubernetes/cfg/
- vim bootstrap.kubeconfig
- server: https://192.168.80.100:6443
-
- vim kubelet.kubeconfig
- server: https://192.168.80.100:6443
-
- vim kube-proxy.kubeconfig
- server: https://192.168.80.100:6443
-
- //重启kubelet和kube-proxy服务
- systemctl restart kubelet.service
- systemctl restart kube-proxy.service
-
- //在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
- netstat -natp | grep nginx

- /测试创建pod
- kubectl run nginx --image=nginx
-
- //查看Pod的状态信息
- kubectl get pods
- NAME READY STATUS RESTARTS AGE
- nginx 0/1 ContainerCreating 0 14s #正在创建中
-
- kubectl get pods
- NAME READY STATUS RESTARTS AGE
- nginx 1/1 Running 0 34m #创建完成,运行中
-
- kubectl get pods -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- nginx 1/1 Running 0 39m 10.244.0.3 192.168.80.11 <none> <none>
- //READY为1/1,表示这个Pod中有1个容器

在对应网段的node节点上操作,可以直接使用浏览器或者curl命令访问
这时在master01节点上查看nginx日志
kubectl logs nginx
Dashboard 介绍
仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)。
例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。
- //在 master01 节点上操作
- #上传 recommended.yaml 文件到 /opt/k8s 目录中
- cd /opt/k8s
- vim recommended.yaml
- #默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
- kind: Service
- apiVersion: v1
- metadata:
- labels:
- k8s-app: kubernetes-dashboard
- name: kubernetes-dashboard
- namespace: kubernetes-dashboard
- spec:
- ports:
- - port: 443
- targetPort: 8443
- nodePort: 30001 #添加
- type: NodePort #添加 NodePort测试环境使用,生产环境不使用。
- selector:
- k8s-app: kubernetes-dashboard
-
- kubectl apply -f recommended.yaml
-
- #创建service account并绑定默认cluster-admin管理员集群角色
- kubectl create serviceaccount dashboard-admin -n kube-system
-
- kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
-
- kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

使用输出的token登录Dashboard
etcd 安装步骤
准备 CA 证书和 私钥文件 ,首先 CA 签发服务端证书 和 私钥文件
使用 CA 证书 、服务端证书、私钥文件 还有etcd 集群配置文件 启动etcd服务
复制etcd工作目录和管理文件到另外几个etcd节点上并修改etcd的配置文件,然后启动etcd服务
最后使用 etcdctl 命令查看etcd集群的状态
master 组件
1、先安装 apiserver
1.1 准备apiserver的证书和私钥文件
准备bootstrap token 认证文件 (用于kubelet启动时签发证书时使用)
准备apiserver的配置文件
启动 apiserver 服务 端口是 6443 https
2、再安装controller-manager 和 scheduler
2.1 先准备相关的启动配置文件
然后再准备相关证书和私钥文件 生成 kubeconfig 文件(用于指定对接apiserver,使用什么证书认证)启动服务
准备kubeconfig文件 把kubectl 加入到集群中(指定对接apiserver,使用什么证书认证)
先部署docker 引擎
准备kubeconfig文件、kube-proxy.kubeconfig文件还有kubenetes组件(kubelet、kube-proxy)
对kubelet-bootstrap 用户授予权限,启动相应服务并通过 CSR 请求
首先引入新的master节点,然后把master01 节点上的证书文件、各master组件的配置文件和服务管理文件拷贝到 其它master 节点并修改配置文件。最后启动相关服务。
搭建nginx/Haproxy keepalived 高可用负载均衡器对master节点
修改 node节点上kubelet kube-proxy的 kubeconfig配置文件对接VIP
kubectl的配置文件也要对接VIP或者当前的节点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。