千家信息网

部署一个完整的K8S集群(下)

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,部署UI[root@k8s-master1 YAML]# kubectl apply -f dashboard.yamlnamespace/kubernetes-dashboard createdse
千家信息网最后更新 2025年12月02日部署一个完整的K8S集群(下)

部署UI

[root@k8s-master1 YAML]# kubectl apply -f dashboard.yaml

namespace/kubernetes-dashboard created

serviceaccount/kubernetes-dashboard created

service/kubernetes-dashboard created

secret/kubernetes-dashboard-certs created

secret/kubernetes-dashboard-csrf created

secret/kubernetes-dashboard-key-holder created

configmap/kubernetes-dashboard-settings created

role.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created

rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

deployment.apps/kubernetes-dashboard created

service/dashboard-metrics-scraper created

deployment.apps/dashboard-metrics-scraper created


[root@k8s-master1 YAML]# kubectl get pods -n kubernetes-dashboard

NAME READY STATUS RESTARTS AGE

dashboard-metrics-scraper-566cddb686-v5s8t 1/1 Running 0 22m

kubernetes-dashboard-7b5bf5d559-sqpd7 1/1 Running 0 22m


[root@k8s-master1 YAML]# kubectl get svc -n kubernetes-dashboard

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

dashboard-metrics-scraper ClusterIP 10.0.0.180 8000/TCP 23m

kubernetes-dashboard NodePort 10.0.0.163 443:30001/TCP 23m


[root@k8s-master1 YAML]# kubectl apply -f dashboard-adminuser.yaml

serviceaccount/admin-user created

clusterrolebinding.rbac.authorization.k8s.io/admin-user created


创建能访问dashboard的token

[root@k8s-master1 src]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

Name: admin-user-token-2k5k9

Namespace: kubernetes-dashboard

Labels:

Annotations: kubernetes.io/service-account.name: admin-user

kubernetes.io/service-account.uid: 14110df7-4a24-4a06-a99e-18c3a60c5b13


Type: kubernetes.io/service-account-token


Data

====

ca.crt: 1359 bytes

namespace: 20 bytes

token: eyJhbGciOiJSUzI1NiIsImtpZCI6IkV5VUtIek9UeUs1WnRnbzJzVzgyaEJKblM3UDFiMXdHTEdPeFhkZmxwaDAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTJrNWs5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNDExMGRmNy00YTI0LTRhMDYtYTk5ZS0xOGMzYTYwYzViMTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eURKAOmq-DOPyf7B_ZH2nIg4QxcMhmy6VL4miZuoXx7g70V69rhQjEdR156TujxHkXIFz4X6biifycm_gLxShn2sAwoiBohzKOogJZLo1hXWl6pAGHbAGLuEZsvN5GrSmyUhC955ztheNve0xx5QTwFLtXFSOuTwnzzKEHYMyfivYTVmf8iovx0S2SS1IQxqFOZxMNH5DKUCK7tleEZxnXcHzUG2zTSn6D7nL8EtAzOAD_kVx6dKsQt4fbMqiOcyG_qFfFopU9ZJwsILTDma4k3iecRAb4KmNlRaasFdXLptF6SDs0IceHqE9hm3yoOB7pZXWsptNafmcrFCSOEjaQ

访问如上链接,有两种验证方式,其一,配置文件验证,其二,token验证,现在选择第二种方式,Token验证登陆,并填入绿色文字的token。

已上画面为登陆dashboard已经成功了


部署coredns:

[root@k8s-master1 YAML]# kubectl apply -f coredns.yaml

serviceaccount/coredns created

clusterrole.rbac.authorization.k8s.io/system:coredns created

clusterrolebinding.rbac.authorization.k8s.io/system:coredns created

configmap/coredns created

deployment.apps/coredns created

service/kube-dns created


运用bs.yml文件进行测试,看看dns是否能解析

[root@k8s-master1 src]# kubectl apply -f bs.yaml

pod/busybox created


[root@k8s-master1 YAML]# kubectl get pods

NAME READY STATUS RESTARTS AGE

busybox 1/1 Running 0 6m47s

web-d86c95cc9-8tmkl 1/1 Running 0 65m


进入busybox,Ping对应的docker,看看能否解析

[root@k8s-master1 YAML]# kubectl exec -it busybox sh

/ # ping web

PING web (10.0.0.203): 56 data bytes

64 bytes from 10.0.0.203: seq=0 ttl=64 time=0.394 ms

64 bytes from 10.0.0.203: seq=1 ttl=64 time=0.323 ms

^C

--- web ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.323/0.358/0.394 ms

/ # ping kubernetes

PING kubernetes (10.0.0.1): 56 data bytes

64 bytes from 10.0.0.1: seq=0 ttl=64 time=0.344 ms

64 bytes from 10.0.0.1: seq=1 ttl=64 time=0.239 ms

^C

--- kubernetes ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.239/0.291/0.344 ms

/ #

如上所示,可以解析,代表coredns已经安装OK了


部署keepalived nginx(两台机都需要部署)

[root@lvs1 ~]# rpm -ivh http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm

Retrieving http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm

warning: /var/tmp/rpm-tmp.oiFMgm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY

Preparing... ################################# [100%]

Updating / installing...

1:nginx-1:1.16.0-1.el7.ngx ################################# [100%]

----------------------------------------------------------------------


Thanks for using nginx!


Please find the official documentation for nginx here:

* http://nginx.org/en/docs/


Please subscribe to nginx-announce mailing list to get

the most important news about nginx:

* http://nginx.org/en/support.html


Commercial subscriptions for nginx are available on:

* http://nginx.com/products/


----------------------------------------------------------------------

[root@lvs1 ~]# systemctl enable nginx

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

[root@lvs1 ~]# systemctl status nginx

● nginx.service - nginx - high performance web server

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

Active: inactive (dead)

Docs: http://nginx.org/en/docs/

[root@lvs1 ~]# systemctl start nginx

[root@lvs1 ~]# systemctl status nginx

● nginx.service - nginx - high performance web server

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

Active: active (running) since Sat 2020-02-01 14:41:09 CST; 11s ago

Docs: http://nginx.org/en/docs/

Process: 1681 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)

Main PID: 1682 (nginx)

CGroup: /system.slice/nginx.service

├─1682 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

└─1683 nginx: worker process


Feb 01 14:41:09 lvs1 systemd[1]: Starting nginx - high performance web server...

Feb 01 14:41:09 lvs1 systemd[1]: Started nginx - high performance web server.


[root@lvs1 ~]# yum install keepalived -y

Loaded plugins: fastestmirror

Determining fastest mirrors

* base: mirrors.aliyun.com

* extras: mirrors.cn99.com

* updates: mirrors.aliyun.com

base | 3.6 kB 00:00:00

extras | 2.9 kB 00:00:00

updates | 2.9 kB 00:00:00

(1/2): extras/7/x86_64/primary_db | 159 kB 00:00:00

(2/2): updates/7/x86_64/primary_db | 5.9 MB 00:00:01

Resolving Dependencies

--> Running transaction check

---> Package keepalived.x86_64 0:1.3.5-16.el7 will be installed

--> Processing Dependency: libnetsnmpmibs.so.31()(64bit) for package: keepalived-1.3.5-16.el7.x86_64

--> Processing Dependency: libnetsnmpagent.so.31()(64bit) for package: keepalived-1.3.5-16.el7.x86_64

--> Processing Dependency: libnetsnmp.so.31()(64bit) for package: keepalived-1.3.5-16.el7.x86_64

--> Running transaction check

---> Package net-snmp-agent-libs.x86_64 1:5.7.2-43.el7 will be installed

--> Processing Dependency: libsensors.so.4()(64bit) for package: 1:net-snmp-agent-libs-5.7.2-43.el7.x86_64

---> Package net-snmp-libs.x86_64 1:5.7.2-43.el7 will be installed

--> Running transaction check

---> Package lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 will be installed

--> Finished Dependency Resolution


Dependencies Resolved


=========================================================================================================================================================================

Package Arch Version Repository Size

=========================================================================================================================================================================

Installing:

keepalived x86_64 1.3.5-16.el7 base 331 k

Installing for dependencies:

lm_sensors-libs x86_64 3.4.0-8.20160601gitf9185e5.el7 base 42 k

net-snmp-agent-libs x86_64 1:5.7.2-43.el7 base 706 k

net-snmp-libs x86_64 1:5.7.2-43.el7 base 750 k


Transaction Summary

=========================================================================================================================================================================

Install 1 Package (+3 Dependent packages)


Total download size: 1.8 M

Installed size: 6.0 M

Downloading packages:

(1/4): lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm | 42 kB 00:00:00

(2/4): net-snmp-agent-libs-5.7.2-43.el7.x86_64.rpm | 706 kB 00:00:00

(3/4): net-snmp-libs-5.7.2-43.el7.x86_64.rpm | 750 kB 00:00:00

(4/4): keepalived-1.3.5-16.el7.x86_64.rpm | 331 kB 00:00:01

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Total 1.0 MB/s | 1.8 MB 00:00:01

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

Warning: RPMDB altered outside of yum.

Installing : 1:net-snmp-libs-5.7.2-43.el7.x86_64 1/4

Installing : lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64 2/4

Installing : 1:net-snmp-agent-libs-5.7.2-43.el7.x86_64 3/4

Installing : keepalived-1.3.5-16.el7.x86_64 4/4

Verifying : keepalived-1.3.5-16.el7.x86_64 1/4

Verifying : 1:net-snmp-agent-libs-5.7.2-43.el7.x86_64 2/4

Verifying : lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64 3/4

Verifying : 1:net-snmp-libs-5.7.2-43.el7.x86_64 4/4


Installed:

keepalived.x86_64 0:1.3.5-16.el7


Dependency Installed:

lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 net-snmp-agent-libs.x86_64 1:5.7.2-43.el7 net-snmp-libs.x86_64 1:5.7.2-43.el7


Complete!


主keepalived配置文件:

[root@lvs1 nginx]# cat /etc/keepalived/keepalived.conf

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

}


vrrp_script check_nginx {

script "/etc/keepalived/check_nginx.sh"

}


vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的

priority 100 # 优先级,备服务器设置 90

advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.120

}

track_script {

check_nginx

}

}


主nginx配置文件:

[root@lvs1 nginx]# cat /etc/nginx/nginx.conf

user nginx;

worker_processes 4;


error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;



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.1.124:6443;

server 192.168.1.125:6443;

server 192.168.1.126:6443;

}

server {

listen 6443;

proxy_pass k8s-apiserver;

}

}



http {

include /etc/nginx/mime.types;

default_type application/octet-stream;


log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';


access_log /var/log/nginx/access.log main;


sendfile on;

#tcp_nopush on;


keepalive_timeout 65;


#gzip on;


include /etc/nginx/conf.d/*.conf;

}


备keepalived配置文件

[root@lvs2 keepalived]# cat /etc/keepalived/keepalived.conf

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_BACKUP

}


vrrp_script check_nginx {

script "/etc/keepalived/check_nginx.sh"

}


vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的

priority 90 # 优先级,备服务器设置 90

advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.120

}

track_script {

check_nginx

}

}


从nginx配置文件:

[root@lvs2 keepalived]# cat /etc/nginx/nginx.conf

user nginx;

worker_processes 4;


error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;



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.1.124:6443;

server 192.168.1.125:6443;

server 192.168.1.126:6443;

}

server {

listen 6443;

proxy_pass k8s-apiserver;

}

}



http {

include /etc/nginx/mime.types;

default_type application/octet-stream;


log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';


access_log /var/log/nginx/access.log main;


sendfile on;

#tcp_nopush on;


keepalive_timeout 65;


#gzip on;


include /etc/nginx/conf.d/*.conf;

}


nginx检测脚本:

nginx脚本要加可执行权限:

[root@lvs1 nginx]# chmod +x /etc/keepalived/check_nginx.sh

[root@lvs2 nginx]# chmod +x /etc/keepalived/check_nginx.sh


[root@lvs2 keepalived]# cat check_nginx.sh

#!/bin/bash

count=$(ps -ef |grep nginx |egrep -cv "grep|$$")


if [ "$count" -eq 0 ];then

exit 1

else

exit 0

fi


[root@lvs1 nginx]# systemctl restart keepalived && systemctl restart nginx

[root@lvs2 nginx]# systemctl restart keepalived && systemctl restart nginx


修改node1,node2,node3节点种的apiserver的接口地址,改成负载均衡器的IP地址即可,然后再重启 kubelet和kube-proxy

[root@k8s-node1 cfg]# grep "192.168" *

bootstrap.kubeconfig: server: https://192.168.1.124:6443

kubelet.kubeconfig: server: https://192.168.1.124:6443

kube-proxy.kubeconfig: server: https://192.168.1.124:6443

[root@k8s-node1 cfg]# sed -i "s#192.168.1.124#192.168.1.120#g" *

[root@k8s-node1 cfg]# grep "192.168" *

bootstrap.kubeconfig: server: https://192.168.1.120:6443

kubelet.kubeconfig: server: https://192.168.1.120:6443

kube-proxy.kubeconfig: server: https://192.168.1.120:6443

[root@k8s-node1 cfg]# systemctl restart kubelet && systemctl restart kube-proxy


[root@k8s-node2 cfg]# sed -i "s#192.168.1.124#192.168.1.120#g" *

[root@k8s-node2 cfg]# grep "192.168" *

bootstrap.kubeconfig: server: https://192.168.1.120:6443

kubelet.kubeconfig: server: https://192.168.1.120:6443

kube-proxy.kubeconfig: server: https://192.168.1.120:6443

[root@k8s-node2 cfg]# systemctl restart kubelet && systemctl restart kube-proxy


[root@k8s-node3 cfg]# sed -i "s#192.168.1.124#192.168.1.120#g" *

[root@k8s-node3 cfg]# grep "192.168" *

bootstrap.kubeconfig: server: https://192.168.1.120:6443

kubelet.kubeconfig: server: https://192.168.1.120:6443

kube-proxy.kubeconfig: server: https://192.168.1.120:6443

[root@k8s-node3 cfg]# systemctl restart kubelet && systemctl restart kube-proxy


命令检测k8s的集群状态,依旧是Ready状态。集群正常,也可以去查看Nginx的日志,观察是否异常

[root@k8s-master1 k8s]# kubectl get nodes

NAME STATUS ROLES AGE VERSION

k8s-node1 Ready 4h28m v1.16.0

k8s-node2 Ready 4h28m v1.16.0

k8s-node3 Ready 4h28m v1.16.0


[root@lvs1 nginx]# tailf /var/log/nginx/k8s-access.log

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:34:19 +0800] 200 1160

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:34:19 +0800] 200 1159

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:34:19 +0800] 200 1159

192.168.1.129 192.168.1.126:6443 - [01/Feb/2020:15:34:19 +0800] 200 1160

192.168.1.129 192.168.1.126:6443 - [01/Feb/2020:15:34:19 +0800] 200 1159

192.168.1.129 192.168.1.126:6443 - [01/Feb/2020:15:34:19 +0800] 200 1160

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:34:19 +0800] 200 1160

192.168.1.129 192.168.1.125:6443 - [01/Feb/2020:15:34:39 +0800] 200 1611

192.168.1.128 192.168.1.126:6443 - [01/Feb/2020:15:34:39 +0800] 200 1611

192.168.1.127 192.168.1.126:6443 - [01/Feb/2020:15:34:39 +0800] 200 1611


[root@lvs2 keepalived]# tailf /var/log/nginx/k8s-access.log

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:33:44 +0800] 200 1161

192.168.1.127 192.168.1.125:6443 - [01/Feb/2020:15:33:44 +0800] 200 1159

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:33:44 +0800] 200 1160

192.168.1.129 192.168.1.124:6443 - [01/Feb/2020:15:33:44 +0800] 200 1159

192.168.1.129 192.168.1.125:6443 - [01/Feb/2020:15:33:44 +0800] 200 1161

192.168.1.129 192.168.1.126:6443 - [01/Feb/2020:15:33:44 +0800] 200 1161

192.168.1.129 192.168.1.125:6443 - [01/Feb/2020:15:33:44 +0800] 200 1159

192.168.1.128 192.168.1.126:6443 - [01/Feb/2020:15:33:44 +0800] 200 1161

192.168.1.128 192.168.1.125:6443 - [01/Feb/2020:15:49:06 +0800] 200 2269

192.168.1.129 192.168.1.125:6443 - [01/Feb/2020:15:51:11 +0800] 200 2270

192.168.1.127 192.168.1.125:6443 - [01/Feb/2020:15:51:47 +0800] 200 2270

192.168.1.128 192.168.1.124:6443 - [01/Feb/2020:15:51:56 +0800] 200 4352

192.168.1.127 192.168.1.124:6443 - [01/Feb/2020:15:52:04 +0800] 200 5390

192.168.1.129 192.168.1.125:6443 - [01/Feb/2020:15:52:07 +0800] 200 4409


代表能正常切换,K8S集群搭建OK

文件 配置 实例 验证 集群 代表 优先级 地址 如上 方式 时间 服务器 状态 脚本 路由 通告 服务 检测 登陆 均衡 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京互联网网络技术咨询市场报价 服务器机柜的发展趋势 打开自己的ftp服务器 天津做网络安全的公司 舟山app软件开发自学步骤 惠普服务器授权代理商 戴尔r720服务器管理网卡 网络安全法》第四十一条 成都启程新维网络技术有限公司 云服务器软件开发源码 图形数据库怎么创建 软件开发预付金要给多少 服务器加宽带一般多少钱 黑魂重制版游戏服务器正在维修 无锡网络安全准入控制系统推荐 数据库没有加外键会有什么问题 mc个人服务器 为什么网络安全模式没有音频 目前主流的无线网络技术 朋友圈发游戏需要租服务器吗 代理服务器怎么匹配多个地址 校园网络安全文字框 浪潮服务器名在哪里看 服务器日志 我的世界周末云服务器 互联网飞速发展的时代与软件开发 软件开发目录名 易语言服务器php 嵌入式软件开发区别 安徽维拉网络技术有限公司
0