配置指南
在 master02
节点上部署 Kubernetes 组件
- 从
master01
节点复制证书文件、配置文件和服务管理文件到master02
节点:scp -r /opt/etcd/ root@20.0.0.66:/opt/ scp -r /opt/kubernetes/ root@20.0.0.66:/opt scp -r /root/.kube root@20.0.0.66:/root scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@20.0.0.66:/usr/lib/systemd/system/
- 修改
kube-apiserver
配置文件中的 IP 地址:vim /opt/kubernetes/cfg/kube-apiserver # 修改 --bind-address 和 --advertise-address 为 20.0.0.66
KUBE_APISERVER_OPTS="--logtostderr=true \ --v=4 \ --etcd- servers=https://20.0.0.10:2379,https://20.0.0.58:2379,https://20.0.0.59:2379 \ --bind-address=20.0.0.66 \ #修改 --secure-port=6443 \ --advertise-address=20.0.0.66 \ #修改 ......
- 在
master02
节点上启动并设置服务开机自启:systemctl start kube-apiserver.service systemctl enable kube-apiserver.service systemctl start kube-controller-manager.service systemctl enable kube-controller-manager.service systemctl start kube-scheduler.service systemctl enable kube-scheduler.service
- 验证
kubectl
命令是否可用,并查看节点状态: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节点都关联起来
配置负载均衡器(Nginx + Keepalived)
在 lb01
和 lb02
节点上操作
配置 Nginx 的官方在线 yum 源并安装 Nginx:
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 # 添加 stream 块 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 20.0.0.10:6443; server 20.0.0.66:6443; } server { listen 6443; proxy_pass k8s-apiserver; } }
检查配置文件语法并启动 Nginx,查看已监听6443端口
nginx -t systemctl start nginx systemctl enable nginx netstat -natp | grep nginx
安装 Keepalived 并配置:
yum install keepalived -y vim /etc/keepalived/keepalived.conf # 根据节点角色(MASTER 或 BACKUP)修改配置 # lb01 为 MASTER,lb02 为 BACKUP
示例配置(MASTER 节点):
# 接收邮件地址 ! 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#lb02节点的为 NGINX_BACKUP } # 添加一个周期性执行的脚本 vrrp_script check_nginx { script "/etc/nginx/check_nginx.sh" } vrrp_instance VI_1 { state 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 { 20.0.0.100/24 #指定 VIP } track_script { check_nginx #指定vrrp_script配置的脚本 } }
创建检查脚本并赋予执行权限
vim /etc/nginx/check_nginx.sh #!/bin/bash count=$(ps -ef | grep nginx | egrep -cv "grep|$$") if [ "$count" -eq 0 ];then systemctl stop keepalived fi chmod +x /etc/nginx/check_nginx.sh # 启动 Keepalived systemctl start keepalived systemctl enable keepalived # 检查 VIP 是否生成 ip a
修改 Node 节点上的配置文件并使用 VIP
- 在所有 Node 节点上,修改
bootstrap.kubeconfig
、kubelet.kubeconfig
和kube-proxy.kubeconfig
文件中的 server 地址为 VIP(20.0.0.100):cd /opt/kubernetes/cfg/ vim bootstrap.kubeconfig # 修改 server 地址为 https://20.0.0.100:6443 vim kubelet.kubeconfig # 修改 server 地址为 https://20.0.0.100:6443 vim kube-proxy.kubeconfig # 修改 server 地址为 https://20.0.0.100:6443 # 重启 kubelet 和 kube-proxy 服务 systemctl restart kubelet.service systemctl restart kube-proxy.service
- 在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
netstat -natp | grep nginx tcp 0 0 0.0.0.0:6443 0.0.0.0:* LISTEN 44904/nginx: master tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 44904/nginx: master tcp 0 0 20.0.0.100:6443 20.0.0.59:46954 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.13:45074 20.0.0.10:6443 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.13:53308 20.0.0.66:6443 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.13:53316 20.0.0.66:6443 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.100:6443 20.0.0.58:48784 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.13:45070 20.0.0.10:6443 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.100:6443 20.0.0.58:48794 ESTABLISHED 44905/nginx: worker tcp 0 0 20.0.0.100:6443 20.0.0.59:46968 ESTABLISHED 44905/nginx: worker
在 master01
节点上测试 Pod 的创建和访问
测试创建 Pod:
kubectl run nginx --image=nginx
查看 Pod 状态:
kubectl get pods NAME READY STATUS RESTARTS AGE nginx-dbddb74b8-nf9sk 0/1 ContainerCreating 0 33s #正在创建中 kubectl get pods NAME READY STATUS RESTARTS AGE nginx-dbddb74b8-nf9sk 1/1 Running 0 80s #创建完成,运行中 kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-dbddb74b8-26r9l 1/1 Running 0 10m 172.17.36.2 20.0.0.14 <none> //READY为1/1,表示这个Pod中有1个容器
在对应网段的 Node 节点上使用浏览器或 curl 命令访问 Pod:
curl <Pod IP>
查看 Pod 日志(如果需要):
kubectl logs <Pod 名称>
(可选)绑定默认 cluster-admin 管理员集群角色,授权集群操作权限(如果执行失败):
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
Dashboard
Dashboard 介绍
仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。
部署Dashboard
在Kubernetes集群的master01节点上部署
上传recommended.yaml
文件到/opt/k8s
目录
修改recommended.yaml
文件
- 使用
vim
或其他文本编辑器打开recommended.yaml
文件,并找到Kubernetes Dashboard的Service部分。 - 默认Dashboard只能集群内部访问,所以将Service类型修改为NodePort,并添加
nodePort
字段以暴露到外部。
cd /opt/k8s
vim recommended.yaml
在文件中找到并修改Service部分如下:
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 # 修改此行
selector:
k8s-app: kubernetes-dashboard
应用修改后的recommended.yaml
文件
使用kubectl apply
命令应用修改后的配置。
kubectl apply -f recommended.yaml
创建service account并绑定默认cluster-admin管理员集群角色
创建名为dashboard-admin
的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
获取并描述secret以获取token
获取dashboard-admin
的token。
Skubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
访问Dashboard
https://NodeIP:30001
NodeIP
是Kubernetes集群中任意节点的IP地址。
在登录页面使用前面获取的token进行登录。
https://NodeIP:30001