搭建多主节点k8s高可用集群(三主两从一VIP)
一、前期环境准备
安装要求
- 集群所有机器都要操作
- 一台或多台机器,操作系统CentOS7.x-86_x64
- 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘20GB 或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap 分区
服务器配置
高可用集群(三主两从一VIP)主机名ip地址配置需要用到的服务备注主k8s-master1172.16.12.1112C/2G/20Gkubeadm,docker,keepalived,haproxy主k8s-master2172.16.12.1122C/2G/20Gkubeadm,docker,keepalived,haproxy主k8s-master3172.16.12.1132C/2G/20Gkubeadm,docker,keepalived,haproxy从k8s-node1172.16.12.1142C/2G/20Gkubeadm,docker从k8s-node2172.16.12.1152C/2G/20Gkubeadm,dockerVIPk8s-vip172.16.12.220不需要真实服务器也可
1、检查操作系统的版本
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上cat/etc/redhat-release
Centos Linux 7.5.1804 (Core)
2、禁用iptable和firewalld服务
kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
# 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
2.1 补充:
如果在云服务器之类的不能关闭防火墙,需要开启相关端口;
master节点:
规则端口范围作用使用者TCP6443*Kubernetes API serveAllTCP2379-2380etcd server client APIkube-apiserver, etcdTCP10250Kubelet APISelf, Control planeTCP10251kube-schedulerSelfTCP10252kube-controller-managerSelf
node节点:
规则端口范围作用使用者TCP10252Kubelet APISelf, Control planeTCP30000-32767NodePort Services**All
3、添加阿里云yum源
cat>> /etc/yum.repo/aliyun.repo <<EOF
[aliyun-os]
name=aliyun-os
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
[aliyun-epel]
name=aliyun-epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0
[aliyun-extra]
name=aliyun-extra
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enabled=1
gpgcheck=0
EOF#清除缓存
yum clean all
#重新加载源缓存
yum makecache
4、关闭selinux
#临时关闭selinux
setenforce 0#永久关闭selinuxsed-i's/^SELINUX=enforcing$/SELINUX=diasbled/' /etc/selinux/config
#临时关闭所有的交换分区
swapoff -a#永久关闭所有的交换分区sed-i'/swap/s/^\(.*\)$/#\1/g' /etc/fstab
5、修改主机名:
#进入相关主机操作[root@k8s-master1 ~]# hostnamectl set-hostname k8s-master1[root@k8s-master2 ~]# hostnamectl set-hostname k8s-master2[root@k8s-master3 ~]# hostnamectl set-hostname k8s-master3[root@k8s-node1 ~]# hostnamectl set-hostname k8s-node1[root@k8s-node2 ~]# hostnamectl set-hostname k8s-node2
6、修改hosts文件
cat>> /etc/hosts <<EOF
172.16.12.111 k8s-master1
172.16.12.112 k8s-master2
172.16.12.113 k8s-master3
172.16.12.114 k8s-node1
172.16.12.115 k8s-node2
172.16.12.220 k8s-vip
EOF
7、时间同步
#安裝同步时间命令
yum install ntpdate -y#同步时间
ntpdate cn.pool.ntp.org
#设置定时任务每五分钟同步一次时间echo"*/5 * * * * root /usr/sbin/ntpdate cn.pool.ntp.org &>/dev/null">> /etc/crontab
8、调整文件数大小
[root@k8s-master1 ~]# ulimit -SHn 65535[root@k8s-master1 ~]# cat >> /etc/security/limits.conf << EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
EOF
补充说明:
- hard:严格的设定,必定不能超过这个设定的数值
- soft:警告的设定,可以超过这个设定值,但是若超过则有警告信息 限制资源:
- core – 限制内核文件的大小
- date – 最大数据大小
- fsize – 最大文件大小
- memlock – 最大锁定内存地址空间
- nofile – 打开文件的最大数目
- rss – 最大持久设置大小
- stack – 最大栈大小
- cpu – 以分钟为单位的最多 CPU 时间
- noproc – 进程的最大数目(系统的最大进程数)
- as – 地址空间限制 maxlogins – 此用户允许登录的最大数目
9、安装配置ipvsadm
#安装所需的命令(上面已经全部安装了,可以不用管)[root@k8s-master1 ~]# yum -y install ipvsadm ipset sysstat conntrack libseccomp#加载ipvs相关模块[root@k8s-master1 ~]# modprobe -- ip_vs[root@k8s-master1 ~]# modprobe -- ip_vs_rr[root@k8s-master1 ~]# modprobe -- ip_vs_wrr[root@k8s-master1 ~]# modprobe -- ip_vs_sh[root@k8s-master1 ~]# modprobe -- nf_conntrack_ipv4[root@k8s-master1 ~]# cat > /etc/modules-load.d/ipvs.conf << EOF
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
[root@k8s-master1 ~]# systemctl enable --now systemd-modules-load.service
10、免密登录
#生成密钥[root@k8s-master1 ~]# ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa &> /dev/null#循环给高可用集群进行免密设置[root@k8s-master1 ~]# for i in k8s-master1 k8s-master2 k8s-master3 k8s-node1 k8s-node2;do sshpass -p '服务器root密码' ssh-copy-id -o StrictHostKeyChecking='no' -i .ssh/id_rsa.pub $i;done
11、安装docker
yum -yinstall gcc-c++ gcc
yum install-y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
yum makecache fast
#启动docker服务并设置开机自启
systemctl start enable--nowdocker
11-1 配置docker
docker镜像加速器,cgroup
mkdir-p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://t1fyrekt.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF#由于新版kubelet建议使用systemd,所以可以把docker的CgroupDriver改成systemd#重新加载docker配置
systemctl daemon-reload
#重新启动docker服务
systemctl restart docker
12、配置相关的内核参数
将桥接的IPv4 流量传递到iptables 的链
cat<<EOF>> /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF#让其生效sysctl--system
13、添加kubenetes国内镜像源
# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源# 2、编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置[kubernetes]name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1gpgchech=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 3、安装kubeadm、kubelet和kubectl[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.21.0 kubelet-1.21.0 kubectl-1.21.0 -y# 4、配置kubelet的cgroup#编辑/etc/sysconfig/kubelet, 添加下面的配置KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"KUBE_PROXY_MODE="ipvs"#查看kubeadm版本
kubeadm version
# 5、设置kubelet开机自启[root@master ~]# systemctl enable --now kubelet
13-1 k8s命令自动补全配置
yum install-y bash-completion
source /usr/share/bash-completion/bash_completion
source<(kubectl completion bash)echo"source <(kubectl completion bash)">> ~/.bashrc
#终端重新连接才能生效
二、部署keepalived+haproxy 高可用
仅需部署在三台master节点
说明:
健康检查和失败切换是keepalived的两大核心功能
健康检查是用tcp三次握手,http请求等方式对负载均衡器后面的实际的服务器进行健康状态检测;
失败切换是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳。当主负载均衡器出现问题时,由备负载均衡器承载对应的业务
HAProxy 是一款TCP/HTTP 反向代理负载均衡服务器软件,类似nginx。
当k8s集群中某个节点服务器发生故障时,Keepalived服务会自动将失效的节点从正常队列中剔除,并将请求调度到别的正常的节点服务器上,从而保证用户访问不受影响。当故障节点被修复后,Keepalived服务又会自动切换回来。
如果是公有云平台部署可以选择公用云自带的负载均衡来代替haproxy和keepalived,比如阿里云的SLB,或者腾讯云的ELB(大部分公有云不支持keepalived)。如果使用的是阿里云,kubectl控制端不能放在master节点,因为阿里云SLB有回环问题,也就是说SLB代理的服务器不能反向访问这个问题,但是腾讯云修复了这个问题。
Keepalived和HAProxy组合结构
操作步骤
1、安装
yum安装 keepalived 和 haproxy
yum -yinstall keepalived haproxy
2、修改haproxy配置
[root@k8s-master1 ~]#cat /etc/haproxy/haproxy.cfg
global
maxconn 2000
ulimit-n 16384
log 127.0.0.1 local0 err
stats timeout 30s
defaults
log global
mode http
option httplog
timeout connect 5000
timeout client 50000
timeout server 50000
timeout http-request 15s
timeout http-keep-alive 15s
frontend monitor-in
bind *:33305
mode http
option httplog
monitor-uri /monitor
frontend k8s-master
bind 0.0.0.0:16443
bind 127.0.0.1:16443
mode tcp
option tcplog
tcp-request inspect-delay 5s
default_backend k8s-master
backend k8s-master
mode tcp
option tcplog
option tcp-check
balance roundrobin
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
server k8s-master1 172.16.12.111:6443 check
server k8s-master2 172.16.12.112:6443 check
server k8s-master3 172.16.12.113:6443 check
3、配置keepalived
- interface #网卡名称
- mcast_src_ip #该节点的ip
- virtual_ipaddress #vip地址
k8s-master1配置
[root@k8s-master1 ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"#健康检查脚本
interval 5
weight -5
fall 2
rise 1}
vrrp_instance VI_1 {
state MASTER #高可用主1
interface eth0 #网卡名称
mcast_src_ip 172.16.12.111 #该节点 IP
virtual_router_id 51
priority 100#设置最高级优先级
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {172.16.12.220 #vip地址}
track_script {
chk_apiserver
}}
k8s-master2配置
[root@k8s-master2 ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 5
weight -5
fall 2
rise 1}
vrrp_instance VI_1 {
state BACKUP #高可用 从1
interface ens33 #网卡名称
mcast_src_ip 172.16.12.112 #该k8s-master2节点 IP
virtual_router_id 51
priority 50#设置优先级
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {172.16.12.220 #vip地址}
track_script {
chk_apiserver
}}
k8s-master3配置
[root@k8s-master3 ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 5
weight -5
fall 2
rise 1}
vrrp_instance VI_1 {
state BACKUP #高可用从2
interface ens33 #网卡名称
mcast_src_ip 172.16.12,113 #该节点 IP
virtual_router_id 51
priority 49#设置优先级
advert_int 2
authentication {
auth_type PASS
auth_pass K8SHA_KA_AUTH
}
virtual_ipaddress {172.16.12.220 #vip地址}
track_script {
chk_apiserver
}}
4、健康检测脚本
所有主节点都需要
[root@k8s-master1 ~]# cat /etc/keepalived/check_apiserver.sh#!/bin/basherr=0forkin$(seq13);docheck_code=$(pgrep haproxy)if[[$check_code==""]];thenerr=$(expr $err + 1)sleep1continueelseerr=0breakfidoneif[[$err!="0"]];thenecho"systemctl stop keepalived"
/usr/bin/systemctl stop keepalived
exit1elseexit0fi#给监测脚本添加执行权限[root@k8s-master1 ~]# chmod +x /etc/keepalived/check_apiserver.sh
5、启动
启动 keepalived 与 haproxy
#生效配置文件[root@k8s-master1 ~]# systemctl daemon-reload#启动并设置开机自启haproxy[root@k8s-master1 ~]# systemctl enable --now haproxy#启动并设置开机自启keepalived[root@k8s-master1 ~]# systemctl enable --now keepalived
测试vip漂移
①、k8s-master1主节点查看VIP
#查看IP与vip的IP[root@k8s-master1 ~]# hostname -I#测试vip的16443端口是否通[root@k8s-master1 ~]# nc -v 172.16.12.220 16443
②、手动关闭master1节点
[root@k8s-master1 ~]# systemctl stop keepalived.service
③、按照keepalived的配置优先级,到master2查看
④、启动master1节点
vip自动回到master1节点
[root@k8s-master1 ~]# systemctl start keepalived.service
三、初始化k8s
master节点初始化
1、修改配置文件
k8s-master1节点创建kubeadm-config.yaml
- advertiseAddress #自己的master1节点IP
- name #自己的master1节点的名称
- certSANs #vip地址
- controlPlaneEndpoint #vip地址
- kubernetesVersion #kubernets版本
- podSubnet #pod网段
- serviceSubnet #service网段
[root@k8s-master1 ~]# vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:-groups:- system:bootstrappers:kubeadm:default-node-token
token: 7t2weq.bjbawausm0jaxury
ttl: 24h0m0s
usages:- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 172.16.12.111
bindPort:6443nodeRegistration:criSocket: /var/run/dockershim.sock
name: k8s-master1
taints:-effect: NoSchedule
key: node-role.kubernetes.io/master
---apiServer:certSANs:- 172.16.12.220
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 172.16.12.220:16443controllerManager:{}dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.21.0
networking:dnsDomain: cluster.local
podSubnet: 10.0.0.0/16
serviceSubnet: 10.96.0.0/12 #pod和service不能在同一网段scheduler:{}
2、更新配置文件
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
3、同步配置文件
将new.yaml文件复制到其他master节点
scp new.yaml 172.16.12.112:/root/
scp new.yaml 172.16.12.113:/root/
查看需要的镜像文件
kubeadm config images list --config /root/new.yaml
4、下载镜像
所有master节点操作
kubeadm config images pull --config /root/new.yaml
coredns镜像可能下载不了,可以“曲线救国”
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
5、初始化master1节点
master1节点 初始化,初始化后生成对应的证书
kubeadm init --config /root/new.yaml --upload-certs
6、加入集群
Token过期后生成新的token:
kubeadm token create --print-join-command
Master需要生成–certificate-key
kubeadm init phase upload-certs --upload-certs
在其他主节点执行,加入集群
kubeadm join172.16.12.220:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:c1a423c36d4e61b2aad80b1b96054a6b3383c975d37913aadc16e8ab0c221997 \
--control-plane --certificate-key 68325dbd227c04b0a711a7e03af388e113ab9cddc876b231cc3ab02d74622db6
在node节点执行,加入集群。
Node节点上主要部署公司的一些业务应用,不建议在master节点部署应用。测试环境节约资源可将pod移至master节点。
kubeadm join172.16.12.220:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:c1a423c36d4e61b2aad80b1b96054a6b3383c975d37913aadc16e8ab0c221997
master1节点 配置环境变量,用于访问Kubernetes集群
cat<<EOF>> /root/.bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF#让其生效source /root/.bashrc
在 master1节点 查看集群节点状态
kubectl get nodes
kubeadm安装方式,所有的系统组件均以容器的方式运行并且在
kube-system
命名空间内,此时可以查看Pod状态:
kubectl get pods -n kube-system -o wide
发现coredns处于pending状态,是因为集群网络还未连通,无法相互访问。
Calico网络组件
(只在 master1节点 操作)【网络插件,用于连接其他节点】
补充:
calico网络插件是如何在不同的node节点之间通信,如何确保不同主机的通信
1、Calico 是一种基于 BGP 协议的容器网络插件,它使用 IP-in-IP 或 VXLAN 将容器节点连接到网络。Calico 可以在 Kubernetes 集群中提供高性能和高可靠性的容器网络,并且支持跨多个主机的容器通信。
2、Calico 通过创建一个虚拟网络层次结构,将每个节点上的容器连接到网络。每个节点上都运行了 Calico 节点代理,这个代理负责管理每个节点上的网络路由和策略。
3、当一个容器需要与另一个容器进行通信时,它会使用 Calico 的虚拟网络层次结构来查找目标容器的 IP 地址。然后,Calico 会根据 BGP 协议来选择最佳的路径来路由数据包。
4、通过 BGP 协议,Calico 可以确保容器在不同主机之间的通信。为了确保不同主机之间的通信,Calico 会在每个节点上创建一个虚拟路由器,并在每个路由器之间建立 BGP 对等连接。通过这些对等连接,每个节点上的路由器可以了解整个网络的拓扑,并决定最佳路径来路由数据包。
5、此外,Calico 还可以使用网络策略来控制容器之间的访问。通过定义网络策略,管理员可以限制容器之间的流量,并确保只有授权的容器才能相互通信。
1、拉取安装包
(安装包内包含:Calico组件、Metrics组件、Dashboard组件)
git clone https://github.com/dotbalo/k8s-ha-install.git
或者使用国内镜像下载
git clone https://kgithub.com/dotbalo/k8s-ha-install.git/
#拉取完成进入该目录cd k8s-ha-install
#切换到manual-installation-v1.20.x分支[root@k8s-master1 k8s-ha-install]# git checkout manual-installation-v1.20.x
2、修改配置文件
如果集群重新初始化了,里面的密钥内容也需要修改。
#进入calico目录[root@k8s-master1 k8s-ha-install]# cd calico/
注意事项:
◎ 需要改的就只要第一行的ip
#将要修改的ip改为自己的ip,按照master节点顺序的改成自己的节点ip[root@k8s-master1 calico]# sed -i 's#etcd_endpoints: "http://<ETCD_IP>:<ETCD_PORT>"#etcd_endpoints: "https://172.16.12.111:2379,https://172.16.12.112:2379,https://172.16.12.113:2379"#g' calico-etcd.yaml#设置临时环境变量ETCD_CA查看ca.crt文件并转化为base64格式取消换行符[root@k8s-master1 calico]# ETCD_CA=`cat /etc/kubernetes/pki/etcd/ca.crt | base64 | tr -d '\n'`#设置临时环境变量ETCD_CERT查看server.crt文件并转化为base64格式取消换行符[root@k8s-master1 calico]# ETCD_CERT=`cat /etc/kubernetes/pki/etcd/server.crt | base64 | tr -d '\n'`#设置临时环境变量ETCD_KEY查看server.key文件并转化为base64格式取消换行符[root@k8s-master1 calico]# ETCD_KEY=`cat /etc/kubernetes/pki/etcd/server.key | base64 | tr -d '\n'`#更换calico-etcd.yaml文件中的# etcd-key: null、# etcd-cert: null、# etcd-ca: null为指定值,临时的环境变量这这用。[root@k8s-master1 calico]# sed -i "s/# etcd-key: null/etcd-key: ${ETCD_KEY}/g; s/# etcd-cert: null/etcd-cert: ${ETCD_CERT}/g; s/# etcd-ca: null/etcd-ca: ${ETCD_CA}/g" calico-etcd.yaml#更换calico-etcd.yaml文件中的etcd_ca: ""#、etcd_cert: ""、etcd_key: "" 为指定值[root@k8s-master1 calico]# sed -i 's#etcd_ca: ""#etcd_ca: "/calico-secrets/etcd-ca"#g; s#etcd_cert: ""#etcd_cert: "/calico-secrets/etcd-cert"#g; s#etcd_key: "" #etcd_key: "/calico-secrets/etcd-key" #g' calico-etcd.yaml#设置临时环境变量POD_SUBNET从kubernetes配置文件中查找自己的网关[root@k8s-master1 calico]# POD_SUBNET=`cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr= | awk -F= '{print $NF}'`#注意下面的这个步骤是把calico-etcd.yaml文件里面的CALICO_IPV4POOL_CIDR下的网段改成自己的Pod网段(kubeadm-config.yaml),并打开注释,不用手动改,会用到上面的环境变量;[root@k8s-master1 calico]# sed -i 's@# - name: CALICO_IPV4POOL_CIDR@- name: CALICO_IPV4POOL_CIDR@g; s@# value: "192.168.0.0/16"@ value: '"${POD_SUBNET}"'@g' calico-etcd.yaml
3、启动
[root@k8s-maste1 calico]# kubectl apply -f calico-etcd.yaml
4、查看容器状态
[root@k8s-master1 calico]# kubectl get pods -n kube-system -o wide
5、查看节点网络连接状态
[root@k8s-master1 calico]# kubectl get nodes
四、集群测试
Metrics部署
将Master1节点的front-proxy-ca.crt复制到所有Node节点
#复制到node1节点上[root@k8s-master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node1:/etc/kubernetes/pki/front-proxy-ca.crt#复制到node2节点上[root@k8s-master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node2:/etc/kubernetes/pki/front-proxy-ca.crt
安装metrics server
#进入上一步拉取的k8s-ha-install/metrics-server-0.4.x-kubeadm/目录[root@k8s-master1 ~]# cd /root/k8s-ha-install/metrics-server-0.4.x-kubeadm/ #根据该目录下的yaml文件创建容器[root@k8s-master1 metrics-server-0.4.x-kubeadm]# kubectl apply -f comp.yaml
查看节点状态
nginx部署
编写yaml文件
vim nginx.yaml
apiVersion: v1
kind: Namespace
metadata:name: nginx-test
labels:name: nginx
---apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx
name: nginx-deployment1
namespace: nginx-test
spec:replicas:3selector:matchLabels:app: nginx
template:metadata:labels:app: nginx
spec:containers:-image: nginx:1.14.0
ports:-containerPort:80name: nginx
---apiVersion: v1
kind: Service
metadata:labels:app: nginx
name: nginx-deployment1
namespace: nginx-test
spec:ports:-port:9000name: nginx-service80
protocol: TCP
targetPort:80nodePort:31090selector:app: nginx
type: NodePort
访问vip:172.16.12.220:31090
master1断电关机
查看vip到达master2
打开浏览器无痕访问vip:172.16.12.220:31090
重新开机mster1节点
查看vip回到master1节点
再次打开浏览器无痕访问vip:172.16.12.220:31090
证明vip在实际应用中成功
操作借鉴云原生-K8s-2
加自己的理解与具体实践上的修改
版权归原作者 小菜_c 所有, 如有侵权,请联系我们删除。