JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

企业级k8s集群部署二 k8s集群需要哪些必备角色功能

wys521 2024-10-05 04:12:19 精选教程 30 ℃ 0 评论

一、 K8s集群多master部署安装

1、前言

Kubernetes 高可用集群系统,前面文档针对部署一套单master的k8s集群做了详细的讲解.

单master集群部署文档地址:

https://wenku.baidu.com/view/c259ad09ecf9aef8941ea76e58fafab069dc442c.html

作为一个企业级应用,我们不能容忍集群中存在单点故障风险. 所以master 我们需要部署成多节点降低风险,根据之前文档集群架构ETCD独立部署三台设备具备了高可用能力, master为单台,这次就进行k8s集群的master节点进行扩展。

2、多master集群实现方案

Kubernetes 集群系统中kube-master中有三个重要组件

kube-apiserver

kube-controller-manager

kube-scheduler其中 kube-controller-manager kube-scheduler 两个组件自身已经具备了选择机制完成高可用。唯独kube-apiserver 需要考虑高可用,kube-apiserver组件从访问角度来说是一个HTTP API服务,故而可以通过web负载均衡方式实现。故此通过常用的流量负载均衡均可实现其高可用功能。这里我们选择最常用的LVS+keepalived+Nginx的作为kube-apiserver访问负载均衡。

3、多master集群系统的设计架构图



二、 部署K8S集群Master2 Node 环境配置

1、 部署k8s系统环境需求

硬件环境: 准备1台 2核CPU 内存2G 硬盘40G 云主机ECS 需要外网

测试用虚拟机环境:VMware 宿主机配置 4核心 8G内存以上 创建1台虚拟机

软件环境:

Centos7.5(mini) DokerCE 19/20 Kubernetes v1.20.13

2、 单master系统集群的服务器IP地址规划

参考之前单master集群部署文档,规划IP

K8s-master2:192.168.3.114

3、 防火墙设置

为提示生产环境安全建议不要关闭防火墙,采用白名单方式放开防火墙设置

10.0.0.0/24 10.244.0.0/16 192.168.3.0/24等网段主机都加入白名单

# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted –permanent

# firewall-cmd --add-source=192.168.3.0/24 --zone=trusted –permanent

# firewall-cmd --add-source=10.244.0.0/16 --zone=trusted –permanent

# firewall-cmd --reload

当然为了调试可以先关闭防火墙。

systemctl stop firewalld

systemctl disable firewalld

4、 关闭selinux设置

#sed -i 's/enforcing/disabled/' /etc/selinux/config

#setenforce 0

5、 关闭swap

swapoff -a # 临时

sed -ri 's/.*swap.*/#&/' /etc/fstab

6、 设置主机名称

# cat >> /etc/hosts << EOF

192.168.3.110 k8s-master1

192.168.3.114 k8s-master2

192.168.3.112 k8s-node1

192.168.3.113 k8s-node2

EOF

7、 设置系统IPtables参数

#cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

#sysctl --system # 生效

8、 设置时间同步

#yum install ntpdate -y

#ntpdate time.windows.com


三、K8s-Master2 Node安装部署

K8s-Master2 与已部署的Master1所有操作一致。所以我们只需将Master1所有K8s文件拷贝过来,再修改下服务器IP和主机名启动即可。


1、 下载Docker包并解压安

1.1 下载docker包解压

wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

tar zxvf docker-19.03.9.tgz

mv docker/* /usr/bin

1.2使用systemd管理docker

cat > /usr/lib/systemd/system/docker.service << EOF

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target


[Service]

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s


[Install]

WantedBy=multi-user.target

EOF

1.3 创建docker配置文件

mkdir /etc/docker

cat > /etc/docker/daemon.json << EOF

{

"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]

}

EOF

注意:registry-mirrors 阿里云镜像加速器

1.4 docker启动并设置开机启动

systemctl daemon-reload && systemctl start docker && systemctl enable docker

2、 K8s-master2 组件

Master2 上创建/opt/etcd/ssl

mkdir –p /opt/etcd/ssl

登陆k8s-master1拷贝Master1上所有K8s文件和etcd证书到Master2:

scp -r /opt/kubernetes root@192.168.3.114:/opt
scp -r /opt/etcd/ssl root@192.168.3.114:/opt/etcd
scp /usr/lib/systemd/system/kube* root@192.168.3.114:/usr/lib/systemd/system
scp /usr/bin/kubectl root@192.168.3.114:/usr/bin
scp -r ~/.kube root@192.168.3.114:~

删除kubelet证书和kubeconfig文件:

rm -f /opt/kubernetes/cfg/kubelet.kubeconfig
rm -f /opt/kubernetes/ssl/kubelet*

修改apiserver、kubelet和kube-proxy配置文件为本地IP:

vi /opt/kubernetes/cfg/kube-apiserver.conf
--bind-address=192.168.3.114\
--advertise-address=192.168.3.114\


vi /opt/kubernetes/cfg/kube-controller-manager.kubeconfig

server: https://192.168.3.114:6443

vi /opt/kubernetes/cfg/kube-scheduler.kubeconfig

server: https://192.168.3.114:6443

vi ~/.kube/config
server: https://192.168.3.114:6443

启动设置开机启动

systemctl daemon-reload
systemctl start kube-apiserver kube-controller-manager kube-scheduler

systemctl enable kube-apiserver kube-controller-manager kube-scheduler

查看集群状态

kubectl get cs

NAME                STATUS    MESSAGE             ERROR

scheduler             Healthy   ok                  

controller-manager       Healthy   ok                  

etcd-1               Healthy   {"health":"true"}   

etcd-2               Healthy   {"health":"true"}   

etcd-0               Healthy   {"health":"true"}


3、 配置k8s集群所用的负载均衡

找两台设备安装一套lvs+keepalived+ngninx 负载均衡系统 并配置VIP为192.168.3.120

Nginx.conf 增加如下配置

可以参考如下文档进行lvs+nginx部署

https://wenku.baidu.com/view/d4ab3c3e463610661ed9ad51f01dc281e53a56c8.html

########## k8s config begin #######################
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.3.110:6443;   # Master1 APISERVER IP:PORT
       server 192.168.3.114:6443;   # Master2 APISERVER IP:PORT
    }
    server {
       listen 6443; 
       proxy_pass k8s-apiserver;
    }
}
 
########## k8s config end   #######################


启动lvs+nginx

4、 修改k8s系统集群中的work-node 接口访问指向VIP

登陆work-node执行

# sed -i 's/192.168.3.110:6443#192.168.3.120:6443/g' /opt/kubernetes/cfg/*
重启动服务
# systemctl restart kubelet kube-proxy


查看集群信息如下就说明多master部署完成


[root@k8s-master2 ~]# kubectl get node
NAME          STATUS   ROLES    AGE   VERSION
k8s-master1   Ready    <none>   15d   v1.20.13
k8s-node1     Ready    <none>   16d   v1.20.13
k8s-node2     Ready    <none>   15d   v1.20.13
[root@k8s-master2 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
controller-manager   Healthy   ok                              
etcd-1               Healthy   {"health":"true","reason":""}   
etcd-0               Healthy   {"health":"true","reason":""}   
etcd-2               Healthy   {"health":"true","reason":""}   


至此多master集群部署完成

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表