集群規(guī)劃
資源網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),資源網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為資源上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的資源做網(wǎng)站的公司定做!主機(jī)名 | ip | 角色 | 組件 |
---|---|---|---|
master1-3 | 192.168.14.138-140 | master+etcd | etcd kube-apiserver kube-controller-manager kubectl kubeadm kubelet kube-proxy flannel |
worker1 | 192.168.14.141 | node | kubectl kubeadm kubelet kube-proxy flannel |
vip | 192.168.14.142 | 實(shí)現(xiàn)apiserver的高可用 |
組件版本
組件 | 版本 |
---|---|
centos | 7.3.1611 |
kernel | 3.10.0-957.el7.x86_64 |
kubeadm | v1.14.3 |
kubelet | v1.14.3 |
kubectl | v1.14.3 |
kube-proxy | v1.14.3 |
flannel | v0.11.0 |
etcd | 3.3.10 |
docker | 18.09.5 |
kubernetes-dashboard | v1.10.1 |
keepalived | 1.3.5 |
haproxy | 1.5.18 |
高可用架構(gòu)說(shuō)明
kubernetes架構(gòu)概念
kube-apiserver:集群核心,集群API接口、集群各個(gè)組件通信的中樞;集群安全控制;
etcd:集群的數(shù)據(jù)中心,用于存放集群的配置以及狀態(tài)信息,通過(guò)RAFT同步信息。
kube-scheduler:集群Pod的調(diào)度中心;默認(rèn)kubeadm安裝情況下–leader-elect參數(shù)已經(jīng)設(shè)置為true,保證master集群中只有一個(gè)kube-scheduler處于活躍狀態(tài);
kube-controller-manager:集群狀態(tài)管理器,當(dāng)集群狀態(tài)與期望不同時(shí),kcm會(huì)努力讓集群恢復(fù)期望狀態(tài),比如:當(dāng)一個(gè)pod死掉,kcm會(huì)努力新建一個(gè)pod來(lái)恢復(fù)對(duì)應(yīng)replicas set期望的狀態(tài);默認(rèn)kubeadm安裝情況下–leader-elect參數(shù)已經(jīng)設(shè)置為true,保證master集群中只有一個(gè)kube-controller-manager處于活躍狀態(tài);
kubelet: kubernetes node上的 agent,負(fù)責(zé)與node上的docker engine打交道;
kube-proxy: 每個(gè)node上一個(gè),負(fù)責(zé)service vip到endpoint pod的流量轉(zhuǎn)發(fā),原理是通過(guò)設(shè)置iptables規(guī)則實(shí)現(xiàn)
負(fù)載均衡說(shuō)明
haproxy: 主要用于apiserver負(fù)載均衡
keepalived: 主要用于apiserver高可用。haproxy+keepalived
主要功能就是實(shí)現(xiàn)高可用狀態(tài)的負(fù)載均衡。首先通過(guò)keepalived生成一個(gè)虛地址VIP(主機(jī)點(diǎn)宕機(jī)后漂移到其他機(jī)器,VIP在哪臺(tái)機(jī)器上,就和本地ip地址一樣,都代表本機(jī),共用同網(wǎng)卡,共用本地服務(wù)service,本地接口socket),然后當(dāng)訪(fǎng)問(wèn)VIP:PORT再通過(guò)haproxy負(fù)載至后端的實(shí)際端口RIP:6443,即真正的apiserver服務(wù).
準(zhǔn)備工作
1、安裝docker
? 參考
2、修改內(nèi)核參數(shù)
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF
sysctl --system
3、關(guān)閉Swap
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
setenforce 0
4、開(kāi)啟ipvs
需要開(kāi)啟的模塊是
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
檢查有沒(méi)有開(kāi)啟
cut -f1 -d " " /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4
沒(méi)有的話(huà),使用以下命令加載
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
5、禁用selinux,關(guān)閉防火墻
關(guān)閉selinux
setenforce 0
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
關(guān)閉防火墻
systemctl stop firewall.service
systemctl disable firewall.service
6、開(kāi)啟免密,檢查網(wǎng)絡(luò),dns,hosts,ntp是否正常
開(kāi)啟免密
[master1]ssh-kengen
[master1]ssh-copy-id root@hosts
編輯hosts
vim /etc/hosts
開(kāi)啟ntp同步
systemctl start ntpd.service
systemctl enable ntpd.service
安裝步驟
一、安裝haproxy和keepalived來(lái)創(chuàng)建一個(gè)負(fù)載均衡器。
1、安裝haproxy
分發(fā)安裝haproxy(所有master節(jié)點(diǎn))
for i in master1 master2 master3; do ssh root@$i "yum install haproxy ";done
配置haproxy文件(所有master節(jié)點(diǎn))
cat /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode tcp
log global
retries 3
timeout connect 10s
timeout client 1m
timeout server 1m
frontend kubernetes
bind *:8443 #配置端口為8443
mode tcp
default_backend kubernetes-master
backend kubernetes-master #后端服務(wù)器,也就是說(shuō)訪(fǎng)問(wèn)192.168.255.140:8443會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到后端的三臺(tái),這樣就實(shí)現(xiàn)了負(fù)載均衡
balance roundrobin
server master1 192.168.14.138:6443 check maxconn 2000
server master2 192.168.14.139:6443 check maxconn 2000
server master3 192.168.14.140:6443 check maxconn 2000
EOF
分發(fā)配置文件
for i in master1 master2 master3; do scp /etc/haproxy/haproxy.cfg root@$i:/etc/haproxy/haproxy.cfg;done
重啟服務(wù)器
systemctl daemon-reload && systemctl restart haproxy && systemctl haproxy
2、安裝keepalived
分發(fā)安裝haproxy(所有master節(jié)點(diǎn))
for i in master1 master2 master3; do ssh root@$i "yum install keepalived ";done
配置keepalived文件(所有master節(jié)點(diǎn))
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 #表示發(fā)送通知郵件時(shí)郵件源地址是誰(shuí)
smtp_server 192.168.200.1 #表示發(fā)送email時(shí)使用的smtp服務(wù)器地址
smtp_connect_timeout 30 #連接smtp連接超時(shí)時(shí)間
router_id LVS_docker1 #主機(jī)標(biāo)識(shí),每臺(tái)機(jī)器上修改
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #備服務(wù)器上改為BACKUP
interface ens160 #改為自己的接口
virtual_router_id 51 # VRID 不可更改
priority 100 #備服務(wù)器上改為小于100的數(shù)字,90,80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.14.142 #虛擬vip,自己設(shè)定
}
}
EOF
keepalived配置不太一樣,要求修改后分發(fā)。
重啟服務(wù)器
systemctl daemon-reload && systemctl restart keepalived && systemctl keepalived
3、驗(yàn)證keepalived是否正常工作。
登錄主節(jié)點(diǎn)
ip a
二、安裝 kubeadm, kubelet 和 kubectl
1、添加國(guó)內(nèi)yum源
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2、指定版本安裝
更新倉(cāng)庫(kù)
yum makecache fast
查找相應(yīng)版本軟件
yum search --showduplicates kubeadm
3、在所有安裝kubelet的節(jié)點(diǎn)上,將kubelet設(shè)置為開(kāi)機(jī)啟動(dòng)
yum install -y kubectl-1.14.3 kubeadm-1.14.3 kubelet-1.14.3
systemctl daemon-reload && systemctl restart kubelet && systemctl kubelet
四、提前下載所有需要用到的鏡像(谷歌鏡像,通過(guò)代理下載)
1、查看需要下載的鏡像
kubeadm config images list
2、通過(guò)代理轉(zhuǎn)換鏡像(命令行直接輸入)(所有節(jié)點(diǎn))
for i in kube-apiserver:v1.14.3 kube-controller-manager:v1.14.3 kube-scheduler:v1.14.3 kube-proxy:v1.14.3 pause:3.1 etcd:3.3.10 coredns:1.3.1 ;do docker pull gcr.akscn.io/google_containers/$i ;docker tag gcr.akscn.io/google_containers/$i k8s.gcr.io/$i; done
國(guó)內(nèi)鏡像參考
https://kubernetes.feisky.xyz/fu-lu/mirrors
五、初始化master
1、初始化master,所有master算作控制平面節(jié)點(diǎn)
1) 在master1編寫(xiě)集群的的初始化配置文件
? 集群版本是v1.14.3
? 指定集群的api端口和地址
? 使用flannel,指定pod端口范圍"10.244.0.0/16"
? 模板文件生成參考:
kubeadm config print init-defaults --component-configs KubeletConfiguration
? 說(shuō)明:
apiServer:
timeoutForControlPlane: 4m0s #超時(shí)時(shí)間
apiVersion: kubeadm.k8s.io/v1beta1 #版本信息
certificatesDir: /etc/kubernetes/pki #證書(shū)位置
clusterName: kubernetes #集群名稱(chēng)
controlPlaneEndpoint: "" #控制平面LOAD_BALANCER_DNS:LOAD_BALANCER_PORT
controllerManager: {}
dns:
type: CoreDNS #dns類(lèi)型
etcd:
local:
dataDir: /var/lib/etcd #etcd位置
imageRepository: k8s.gcr.io #鏡像倉(cāng)庫(kù)
kind: ClusterConfiguration #類(lèi)型是集群配置
kubernetesVersion: v1.14.0 # kubernetes版本
networking:
dnsDomain: cluster.local #dns
podSubnet: "" #子網(wǎng)類(lèi)型,和插件有關(guān)
serviceSubnet: 10.96.0.0/12 #service地址設(shè)定
scheduler: {}
? 最終配置文件
cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.14.3
controlPlaneEndpoint: "192.168.14.142:8443"
networking:
podSubnet: "10.244.0.0/16"
EOF
2) 執(zhí)行初始化
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs
#--pod-network-cidr=10.244.0.0/16 設(shè)置flannel子網(wǎng)地址訪(fǎng)問(wèn)
# --experimental-upload-certs標(biāo)志用于將應(yīng)在所有控制平面實(shí)例之間共享的證書(shū)上載到群集,主控制平面的證書(shū)被加密并在上傳的kubeadm-certs sercert
3) 初始化完成后的主要提示如下
其他的master節(jié)點(diǎn)加入控制平面的命令
kubeadm join 192.168.14.142:8443 --token g9up4e.wr2zvn1y0ld2u9c8 --discovery-token-ca-cert-hash sha256:d065d5c2bfce0f5e0f784ed18cb0989dd19542721969c12888f04496b03f121c --experimental-control-plane --certificate-key ddad01f830084f0dd4a9f89e914020cf1001aa31f4550cf5fccce9bad2d6d599
node節(jié)點(diǎn)加入node的命令
kubeadm join 192.168.14.131:6443 --token xl9aa5.2lxz30aupuf9lbhh --discovery-token-ca-cert-hash sha256:0fa135166d86ad9e654f7b92074b34a42a5a25152c05e9253df62af8541c7bad
配置kubeconfig的命令提示
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4)配置kubectl,主要是配置訪(fǎng)問(wèn)apiserver 的權(quán)限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5)kubectl命令補(bǔ)選
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
? 2、初始化控制平面其他master 主機(jī)
其他的master節(jié)點(diǎn)加入控制平面的命令
kubeadm join 192.168.14.142:8443 --token g9up4e.wr2zvn1y0ld2u9c8 --discovery-token-ca-cert-hash sha256:d065d5c2bfce0f5e0f784ed18cb0989dd19542721969c12888f04496b03f121c --experimental-control-plane --certificate-key
? 3、集群證書(shū)和hash值,2個(gè)小小時(shí)后過(guò)期。重新生成證書(shū)方法如下
控制平面生成證書(shū)的解密密鑰
sudo kubeadm init phase upload-certs --experimental-upload-certs
集群重新生成token
kubeadm token create
集群重新生成hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
控制平面重新加入集群的方法
kubeadm join --token : --discovery-token-ca-cert-hash sha256: --experimental-control-plane --certificate-key cert
work節(jié)點(diǎn)重新加入集群的方法
kubeadm join --token : --discovery-token-ca-cert-hash sha256:
4、檢查三臺(tái)master是否初始化成功
kubectl get nodes
六、 將worker節(jié)點(diǎn)加入集群
kubeadm join 192.168.14.131:6443 --token xl9aa5.2lxz30aupuf9lbhh --discovery-token-ca-cert-hash sha256:0fa135166d86ad9e654f7b92074b34a42a5a25152c05e9253df62af8541c7bad
七、安裝網(wǎng)絡(luò)插件Flannel(主節(jié)點(diǎn)運(yùn)行即可)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
八、查看集群狀態(tài)
master1 Ready master 4h51m v1.14.3
master2 Ready 4h46m v1.14.3
master3 Ready master 4h60m v1.14.3
worker1 Ready master 4h49m v1.14.3
參考鏈接:
kubeadm高可用安裝kubernetes v1.14.3
通過(guò)kubeadm創(chuàng)建單個(gè)集群
通過(guò)kubeadm創(chuàng)建高可用集群
通過(guò)kubeadm配置集群中的每個(gè)kubelet
后續(xù)繼續(xù)補(bǔ)充,mark!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。