偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

「云原生」穩(wěn)定性和可擴(kuò)展性更強(qiáng)的k8s高可用方案講解與實(shí)戰(zhàn)操作

云計(jì)算 云原生
在前面我的文章里或者網(wǎng)上其它資料講高可用方案,基本上大多數(shù)使用Keepalived VIP的方案,但是這種方案并不是最佳的,還有更優(yōu)的高可用方案,下面將詳細(xì)介紹。

一、概述

在前面我的文章里或者網(wǎng)上其它資料講高可用方案,基本上大多數(shù)使用Keepalived VIP的方案,但是這種方案并不是最佳的,還有更優(yōu)的高可用方案,下面將詳細(xì)介紹。

二、架構(gòu)

三、開始部署

(1)節(jié)點(diǎn)信息

hostname

IP

角色

local-168-182-110

192.168.182.110

master

local-168-182-111

192.168.182.110

node

local-168-182-112

192.168.182.110

node

local-168-182-113

192.168.182.113

master

local-168-182-130

192.168.182.130

master

(2)前期準(zhǔn)備(所有節(jié)點(diǎn))

1)配置hosts

192.168.182.110 local-168-182-110
192.168.182.111 local-168-182-111
192.168.182.112 local-168-182-112
192.168.182.113 local-168-182-113
192.168.182.130 local-168-182-130

2)配置互信

# 直接一直回車就行
ssh-keygen

ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-110
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-111
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-112
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-113
ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-130

3)時(shí)間同步

yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd
chronyc sources

4)關(guān)閉防火墻

systemctl stop firewalld
systemctl disable firewalld

5)禁用SELinux

# 臨時(shí)關(guān)閉
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

6)關(guān)閉swap

# 臨時(shí)關(guān)閉;關(guān)閉swap主要是為了性能考慮
swapoff -a
# 可以通過這個(gè)命令查看swap是否關(guān)閉了
free
# 永久關(guān)閉
sed -ri 's/.*swap.*/#&/' /etc/fstab

7)設(shè)置bridge-nf-call-iptables

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 設(shè)置所需的 sysctl 參數(shù),參數(shù)在重新啟動后保持不變
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 應(yīng)用 sysctl 參數(shù)而不重新啟動
sudo sysctl --system

(3)安裝容器docker(所有節(jié)點(diǎn))

# 配置yum源
cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/
# centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 安裝yum-config-manager配置工具
yum -y install yum-utils
# 設(shè)置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker-ce版本
yum install -y docker-ce
# 啟動并設(shè)置開機(jī)自啟
# 設(shè)置為開機(jī)自啟并現(xiàn)在立刻啟動服務(wù) --now:立刻啟動服務(wù)
systemctl enable --now docker

# 查看版本號
docker --version
# 查看版本具體信息
docker version

# Docker鏡像源設(shè)置
# 修改文件 /etc/docker/daemon.json,沒有這個(gè)文件就創(chuàng)建
# 配置docker cgroup 驅(qū)動程序systemd
# 添加以下內(nèi)容后,重啟docker服務(wù):
cat >/etc/docker/daemon.json<<EOF
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 加載
systemctl restart docker

# 查看
systemctl status docker

(4)配置k8s yum源(所有節(jié)點(diǎn))

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF

(5)開始安裝kubeadm,kubelet和kubectl(所有節(jié)點(diǎn))

# 查找所有的版本,這里選擇1.23.x版本
yum --showduplicates list kubelet

# disableexcludes=kubernetes:禁掉除了這個(gè)kubernetes之外的別的倉庫
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 --disableexcludes=kubernetes

# 設(shè)置為開機(jī)自啟并現(xiàn)在立刻啟動服務(wù) --now:立刻啟動服務(wù)
systemctl enable --now kubelet

# 查看狀態(tài),這里需要等待一段時(shí)間再查看服務(wù)狀態(tài),啟動會有點(diǎn)慢
systemctl status kubelet

# 查看版本
kubectl version
yum info kubeadm

(6)使用 kubeadm 初始化集群(第一個(gè)master節(jié)點(diǎn))

最好提前把鏡像下載好,這樣安裝快

docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.6
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.6
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.6
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.23.6
docker pull registry.aliyuncs.com/google_containers/pause:3.6
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.1-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6

集群初始化

kubeadm init \
--apiserver-advertise-address=192.168.182.110 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--control-plane-endpoint=192.168.182.110 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--v=5
# –image-repository string: 這個(gè)用于指定從什么位置來拉取鏡像(1.13版本才有的),默認(rèn)值是k8s.gcr.io,我們將其指定為國內(nèi)鏡像地址:registry.aliyuncs.com/google_containers
# –kubernetes-version string: 指定kubenets版本號,默認(rèn)值是stable-1,會導(dǎo)致從https://dl.k8s.io/release/stable-1.txt下載最新的版本號,我們可以將其指定為固定版本(v1.22.1)來跳過網(wǎng)絡(luò)請求。
# –apiserver-advertise-address 指明用 Master 的哪個(gè) interface 與 Cluster 的其他節(jié)點(diǎn)通信。如果 Master 有多個(gè) interface,建議明確指定,如果不指定,kubeadm 會自動選擇有默認(rèn)網(wǎng)關(guān)的 interface。這里的ip為master節(jié)點(diǎn)ip,記得更換。
# –pod-network-cidr 指定 Pod 網(wǎng)絡(luò)的范圍。Kubernetes 支持多種網(wǎng)絡(luò)方案,而且不同網(wǎng)絡(luò)方案對 –pod-network-cidr有自己的要求,這里設(shè)置為10.244.0.0/16 是因?yàn)槲覀儗⑹褂?flannel 網(wǎng)絡(luò)方案,必須設(shè)置成這個(gè) CIDR。
# --control-plane-endpoint cluster-endpoint 是映射到該 IP 的自定義 DNS 名稱,這里配置hosts映射:127.0.0.1 cluster-endpoint。 這將允許你將 --control-plane-endpoint=cluster-endpoint 傳遞給 kubeadm init,并將相同的 DNS 名稱傳遞給 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的負(fù)載均衡器的地址。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看節(jié)點(diǎn)信息

kubectl get nodes

發(fā)現(xiàn)節(jié)點(diǎn)是NotReady狀態(tài),查看日志是因?yàn)闆]有裝CNI網(wǎng)絡(luò)插件,接下來就開始安裝Calico 網(wǎng)絡(luò)插件,當(dāng)然也可以選擇其它網(wǎng)絡(luò)插件。

(7)安裝Calico網(wǎng)絡(luò)插件

wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml

# 查看
kubectl get all -n kube-system|grep calico

# 等calico pod都正常了,再查看節(jié)點(diǎn)狀態(tài)
kubectl get pods -A
kubectl get nodes

(8)配置IPVS(所有節(jié)點(diǎn))

1)加載ip_vs相關(guān)內(nèi)核模塊

modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr

所有節(jié)點(diǎn)驗(yàn)證開啟了ipvs:

lsmod |grep ip_vs

2)安裝ipvsadm工具

yum install ipset ipvsadm -y

3)編輯kube-proxy配置文件,mode修改成ipvs

kubectl edit  configmap -n kube-system  kube-proxy

4)重啟kube-proxy

# 先查看
kubectl get pod -n kube-system | grep kube-proxy
# 再delete讓它自拉起
kubectl get pod -n kube-system | grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
# 再查看
kubectl get pod -n kube-system | grep kube-proxy

(9)master節(jié)點(diǎn)加入集群

【問題】

One or more conditions for hosting a new control plane instance is not satisfied. unable to add a new control plane instance to a cluster that doesn't have a stable controlPlaneEndpoint address

【解決】添加如下配置:

# controlPlaneEndpoint: 192.192.168.110
kubectl edit cm kubeadm-config -n kube-system

開始執(zhí)行下面的命令將master節(jié)點(diǎn)加入集群

# 在第一個(gè)master節(jié)點(diǎn)上執(zhí)行以下獲取執(zhí)行命令
# 證如果過期了,可以使用下面命令生成新證書上傳,這里會打印出certificate key,后面會用到
CERT_KEY=`kubeadm init phase upload-certs --upload-certs|tail -1`

# 其中 --ttl=0 表示生成的 token 永不失效. 如果不帶 --ttl 參數(shù), 那么默認(rèn)有效時(shí)間為24小時(shí). 在24小時(shí)內(nèi), 可以無數(shù)量限制添加 worker.
echo `kubeadm token create --print-join-command --ttl=0` " --control-plane --certificate-key $CERT_KEY --v=5"

# 拿到上面打印的命令在需要添加的節(jié)點(diǎn)上執(zhí)行

# --control-plane 標(biāo)志通知 kubeadm join 創(chuàng)建一個(gè)新的控制平面。加入master必須加這個(gè)標(biāo)記
# --certificate-key ... 將導(dǎo)致從集群中的 kubeadm-certs Secret 下載控制平面證書并使用給定的密鑰進(jìn)行解密。這里的值就是上面這個(gè)命令(kubeadm init phase upload-certs --upload-certs)打印出的key。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

等網(wǎng)絡(luò)插件自動安裝完后,再查看節(jié)點(diǎn)狀態(tài)

kubectl get nodes

(10)修改master節(jié)點(diǎn)指向自己apiserver

1)修改配置

cd /etc/kubernetes
# 修改/etc/kubernetes/admin.conf,/etc/kubernetes/kubelet.conf文件中的server ip改成127.0.0.1
vi /etc/kubernetes/admin.conf
vi /etc/kubernetes/kubelet.conf

# 覆蓋配置
cp /etc/kubernetes/admin.conf ~/.kube/config

2)刪除舊的證書,生成新證書

cd /etc/kubernetes/pki

# 先備份
mv apiserver.key apiserver.key.bak
mv apiserver.crt apiserver.crt.bak

# 使用如下命令生成,分別在三個(gè)master節(jié)點(diǎn)上執(zhí)行
kubeadm init phase certs apiserver --apiserver-advertise-address 192.168.182.110 --apiserver-cert-extra-sans "127.0.0.1,10.1.0.1"

kubeadm init phase certs apiserver --apiserver-advertise-address 192.168.182.113 --apiserver-cert-extra-sans "127.0.0.1,10.1.0.1"

kubeadm init phase certs apiserver --apiserver-advertise-address 192.168.182.130 --apiserver-cert-extra-sans "127.0.0.1,10.1.0.1"
# --apiserver-cert-extra-sans "127.0.0.1":設(shè)置了這個(gè),之后加入節(jié)點(diǎn)驗(yàn)證證書階段就不會報(bào)錯了。

3)修改apiserver

kubectl -n kube-system edit cm kubeadm-config -o yaml

4)修改kube-prxoy配置

kubectl edit cm kube-proxy -oyaml -n kube-system

重啟

kubectl delete pod -n kube-system `kubectl get pods  -n kube-system|grep kube-proxy|awk '{print $1}'`

5)重啟docker和kubelet

systemctl restart docker kubelet

(11)node節(jié)點(diǎn)上安裝nginx

這里使用nginx四層代理

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum install epel-release
yum -y install nginx
yum -y install nginx-all-modules.noarch

配置nginx,在nginx.conf添加如下配置:

stream {                          #實(shí)現(xiàn)四層代理功能
upstream kube_apiserver { #定義集群,kube_apiserver是集群名稱,可自行定義
least_conn;# 默認(rèn)調(diào)度策略是輪詢,在輪詢中,如果服務(wù)器down掉了,會自動剔除該服務(wù)器。
server local-168-182-110:6443 max_fails=3 fail_timeout=30s; #集群組是三臺服務(wù)器k8s apiserver組成
server local-168-182-113:6443 max_fails=3 fail_timeout=30s;
server local-168-182-130:6443 max_fails=3 fail_timeout=30s;
}
server { #定義一個(gè)服務(wù)
listen 127.0.0.1:6443; #需要監(jiān)聽的端口
proxy_pass kube_apiserver; #調(diào)用集群
proxy_connect_timeout 10s; # 連接超時(shí)時(shí)間
proxy_timeout 300s; # 端口保持時(shí)間
}
}

(12)node節(jié)點(diǎn)加入集群

# 在第一個(gè)master節(jié)點(diǎn)上執(zhí)行以下獲取執(zhí)行命令
# 證如果過期了,可以使用下面命令生成新證書上傳,這里會打印出certificate key,后面會用到
CERT_KEY=`kubeadm init phase upload-certs --upload-certs|tail -1`

# 其中 --ttl=0 表示生成的 token 永不失效. 如果不帶 --ttl 參數(shù), 那么默認(rèn)有效時(shí)間為24小時(shí). 在24小時(shí)內(nèi), 可以無數(shù)量限制添加 worker.
echo `kubeadm token create --print-join-command --ttl=0` " --certificate-key $CERT_KEY --v=5"
# 示例如下:
kubeadm join 127.0.0.1:6443 --token esczfh.6ckynzi6wfj8jhnk --discovery-token-ca-cert-hash sha256:bc8fb85184ed235b88afdba38f0a17976d353abb10d0739d25df452745d1eed8 --certificate-key a126867ad4d91721f157660df77cdea7862ebda8371280c3025c4cc45c23b85f --v=5

修改/etc/kubernetes/kubelet.conf配置

重啟

systemctl restart kubelet

等網(wǎng)絡(luò)插件自動安裝完后,再查看節(jié)點(diǎn)狀態(tài)

kubectl get nodes
kubectl get pods -A

(13)卸載

kubeadm reset
rm -rf /etc/kubernetes/*
rm -fr ~/.kube
rm -fr /var/lib/etcd

四、高可用故障模式測試

(1)master節(jié)點(diǎn)故障模擬(一個(gè)master故障)

# 關(guān)機(jī)192.168.182.110
showdown -h now
# 在其它master節(jié)點(diǎn)上查看節(jié)點(diǎn)狀態(tài)
kubectl get nodes

【結(jié)論】如上圖可知,掛一個(gè)master節(jié)點(diǎn)不影響集群。

(2)master節(jié)點(diǎn)故障模擬(兩個(gè)master故障)

# 關(guān)機(jī)192.168.182.113
showdown -h now
# 在其它master節(jié)點(diǎn)上查看節(jié)點(diǎn)狀態(tài)
kubectl get nodes

【結(jié)論】如上圖可知,掛兩個(gè)master節(jié)點(diǎn),整個(gè)集群不可用,還是之前說的,三個(gè)master節(jié)點(diǎn)只允許掛一個(gè)master節(jié)點(diǎn),這里就不細(xì)說了。


責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2023-03-06 07:19:50

2023-03-03 07:54:21

2022-11-08 08:55:31

2023-03-07 07:56:37

Sqoopk8s底層

2022-10-14 07:42:50

LuceneHTTPWeb

2022-11-06 21:31:11

云原生Sentinel集群模式

2023-03-01 07:42:12

HBase編排部署數(shù)據(jù)

2013-04-09 10:16:28

OpenStackGrizzlyHyper-V

2021-12-09 05:36:16

云存儲可擴(kuò)展性數(shù)據(jù)存儲云存儲

2022-10-10 12:54:00

Flink運(yùn)維

2017-01-05 19:29:10

公共云云存儲微軟

2022-02-24 08:18:12

穩(wěn)定性高可用可用性

2022-06-14 14:57:47

穩(wěn)定性高可用流程

2021-12-03 14:41:00

云存儲可擴(kuò)展性存儲

2023-02-27 07:40:00

2022-10-20 12:04:08

2023-06-15 15:40:36

2014-05-29 10:09:13

甲骨文MySQL Fabri

2023-06-30 08:43:36

2021-09-02 09:42:11

測試軟件可擴(kuò)展性開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號