真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

kubernetes集群安裝指南:環(huán)境準(zhǔn)備及初始化系統(tǒng)-創(chuàng)新互聯(lián)

本系列文檔將介紹使用二進(jìn)制文件部署最新 kubernetes v1.14.2 集群所有步驟,而不是使用 kubeadm 等自動(dòng)化方式來(lái)部署集群。主要適合于有一定 kubernetes 基礎(chǔ),想通過(guò)一步步部署的方式來(lái)學(xué)習(xí)和了解系統(tǒng)相關(guān)配置、運(yùn)行原理的同學(xué)。也同樣適用于測(cè)試或生產(chǎn)自建kubernetes集群等應(yīng)用場(chǎng)景。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站與策劃設(shè)計(jì),三亞網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:三亞等地區(qū)。三亞做網(wǎng)站價(jià)格咨詢:18980820575

一 環(huán)境準(zhǔn)備


1.1 版本信息

  • OS 系統(tǒng): Centos 7.6

  • kubernetes版本:v1.14.2

  • Etcd數(shù)據(jù)庫(kù):v3.3.13

  • Network插件:Flanneld 0.11.0

  • Docker 版本: 18.09.6-CE

  • K8s插件:CoreDns,Heapster,Influxdb,Grafana,Dashboard,elk,Metrics-server

  • Docker倉(cāng)庫(kù):Harbor

1.2 架構(gòu)概覽:

kubernetes集群安裝指南:環(huán)境準(zhǔn)備及初始化系統(tǒng)
其中:

負(fù)載均衡:

采用keepalived主主模式結(jié)合haproxy tcp四層代理為kube apiserver提供高可用架構(gòu),內(nèi)網(wǎng)使用內(nèi)網(wǎng)VIP地址作為集群內(nèi)所有組件訪問(wèn)地址;外網(wǎng)采用外網(wǎng)vip地址訪問(wèn),主要為Internet 客戶端訪問(wèn)

master集群:

使用keepalived+haproxy部署apiserver集群高可用;其他組件kube-controller-manager,kube-sheduler利用etcd選舉機(jī)制,與apiserver組件部署同一node上,在分別部署了三個(gè)節(jié)點(diǎn),組成高可用集群;

etcd集群:

同master節(jié)點(diǎn)所有組件部署在同一主機(jī)上,分別部署了三個(gè)節(jié)點(diǎn),使用TLS開(kāi)啟HTTPS雙向認(rèn)證組成etcd高可用集群;

網(wǎng)絡(luò):

使用Flanneld打通master節(jié)點(diǎn)和node節(jié)點(diǎn)間網(wǎng)絡(luò),以便集群各個(gè)節(jié)點(diǎn)網(wǎng)絡(luò)互通(亦可以使用calico網(wǎng)絡(luò));

客戶端:

在devops機(jī)器上部署了kubectl以及kubens,其中kubectl主要是對(duì)kubernetes的object資源進(jìn)行rest操作,kubens主要是用于ns切換

docker鏡像倉(cāng)庫(kù):

使用 vmware harboar作為docker私有鏡像鏡像;提供私有鏡像pull,push,從而對(duì)私有的鏡像進(jìn)行管理

相關(guān)服務(wù)器信息如下圖1所示:
主機(jī)名 內(nèi)網(wǎng)IP 外網(wǎng)IP 服務(wù)器角色 部署軟件或應(yīng)用
devops-k8s-n0110.10.10.21192.168.20.21運(yùn)維控制發(fā)布機(jī)kubectl, kubens, ansible, cffss
lvs-ha-n0110.10.10.30192.168.20.30slb負(fù)載均衡器keepalived, haproxy, bind
lvs-ha-n0210.10.10.31192.168.20.31slb負(fù)載均衡器keepalived, haproxy, bind
master-k8s-n0110.10.10.22192.168.20.22master節(jié)點(diǎn)01master節(jié)點(diǎn)所有組件, flanneld插件
master-k8s-n0210.10.10.23192.168.20.23master節(jié)點(diǎn)02master節(jié)點(diǎn)相關(guān)組件, flanneld插件
master-ks8-n0310.10.10.24192.168.20.24master節(jié)點(diǎn)03master節(jié)點(diǎn)相關(guān)組件, flanneld插件
worker-k8s-n0110.10.10.40192.168.20.40worker節(jié)點(diǎn)01worker節(jié)點(diǎn)相關(guān)組件, flanneld插件
worker-k8s-n0210.10.10.41192.168.20.41worker節(jié)點(diǎn)02worker節(jié)點(diǎn)相關(guān)組件, flanneld插件
docker-hub-server10.10.10.20192.168.20.20docker鏡像倉(cāng)庫(kù)docker, docker-compose, harbor

1.3. 組件訪問(wèn)策略

1.3.1 kube-apiserver:
  • 基于Keepalived+ Haproxy 四層透明代理實(shí)現(xiàn)高可用;

  • 開(kāi)啟非安全端口 8080 和關(guān)閉匿名訪問(wèn),基于token訪問(wèn);

  • 在安全端口 6443 接收 https 請(qǐng)求;

  • 嚴(yán)格的認(rèn)證和授權(quán)策略 (x509、token、RBAC);

  • 開(kāi)啟 bootstrap token 認(rèn)證,支持 kubelet TLS bootstrapping;

  • 使用 https 訪問(wèn) kubelet、etcd,加密通信;
1.3.2 kube-controller-manager:
  • 3 節(jié)點(diǎn)高可用;

  • 開(kāi)啟安全端口,在安全端口 10252 接收 https 請(qǐng)求;

  • 使用 kubeconfig 訪問(wèn) apiserver 的安全端口;

  • 自動(dòng) approve kubelet 證書(shū)簽名請(qǐng)求 (CSR),證書(shū)過(guò)期后自動(dòng)輪轉(zhuǎn);

  • 各 controller 使用自己的 ServiceAccount 訪問(wèn) apiserver;
1.3.3 kube-scheduler:
  • 3 節(jié)點(diǎn)高可用;
  • 使用 kubeconfig 訪問(wèn) apiserver 的安全端口;
1.3.4 kubelet:
  • 使用 kubeadm 動(dòng)態(tài)創(chuàng)建 bootstrap token,而不是在 apiserver 中靜態(tài)配置;
  • 使用 TLS bootstrap 機(jī)制自動(dòng)生成 client 和 server 證書(shū),過(guò)期后自動(dòng)輪轉(zhuǎn);
  • 在 KubeletConfiguration 類型的 JSON 文件配置主要參數(shù);
  • 關(guān)閉只讀端口,在安全端口 10250 接收 https 請(qǐng)求,對(duì)請(qǐng)求進(jìn)行認(rèn)證和授權(quán),拒絕匿名訪問(wèn)和非授權(quán)訪問(wèn);
  • 使用 kubeconfig 訪問(wèn) apiserver 的安全端口;
1.3.5 kube-proxy:
  • 使用 kubeconfig 訪問(wèn) apiserver 的安全端口;
  • 在 KubeProxyConfiguration 類型的 JSON 文件配置主要參數(shù);
  • 使用 ipvs 代理模式;

二 系統(tǒng)基本設(shè)置


2.1 域名設(shè)置

在bind配置文件里添加以下解析記錄,這里以mo9.com為 域名后綴,bind服務(wù)安裝此處忽略。

解析A記錄字段 域名后綴 解析IP 備注
lvs-ha-n01mo9.com10.10.10.30slb負(fù)載均衡器01,ssh主機(jī)使用
lvs-ha-n02mo9.com10.10.10.31slb負(fù)載均衡器 02,ssh主機(jī)使用
master-k8s-n01mo9.com10.10.10.22設(shè)置master節(jié)點(diǎn)01域名以方便metric數(shù)據(jù)采集
master-k8s-n02mo9.com10.10.10.23設(shè)置master節(jié)點(diǎn)02域名以方便metric數(shù)據(jù)采集
master-k8s-n03mo9.com10.10.10.24設(shè)置master節(jié)點(diǎn)03域名以方便metric數(shù)據(jù)采集
worker-k8s-n01mo9.com10.10.10.40設(shè)置worker 節(jié)點(diǎn)01域名以方便metric數(shù)據(jù)采集
worker-k8s-n02mo9.com10.10.10.41設(shè)置worker 節(jié)點(diǎn)01域名以方便metric數(shù)據(jù)采集
registry-mirrorsmo9.com10.10.10.20docker鏡像私有倉(cāng)庫(kù)域名,私有鏡像上傳下載使用
dev-kube-apimo9.com10.10.10.100apiserver集群訪問(wèn)域名, 所有組件通過(guò)該域名訪問(wèn)apiserver
dev-kube-apimo9.com192.168.20.100apiserver集群外網(wǎng)訪問(wèn)域名, 外網(wǎng)用戶通過(guò)該域名訪問(wèn)

備注:
這里需要要添加相關(guān)主機(jī)的域名解析,因?yàn)閗ubelet配置里hostname值是主機(jī)名時(shí),不設(shè)置會(huì)導(dǎo)致dashboard上看不到pod日志輸出error,提示無(wú)法機(jī)械節(jié)點(diǎn)域名;亦可以將該值設(shè)置成ip,避免無(wú)法訪問(wèn)10250端口服務(wù),當(dāng)然可以通過(guò)hosts方式將上述信息寫(xiě)到每個(gè)node上的/etc/hosts文件內(nèi)

2.2 機(jī)器主機(jī)名設(shè)置及DNS解析地址設(shè)置
主機(jī)名設(shè)置

將對(duì)應(yīng)主機(jī)hostname信息設(shè)置成表1信息所示的主機(jī)名

hostnamectl set-hostname  主機(jī)名
各node主機(jī)dns解析設(shè)置

在各個(gè)Linux主機(jī)上將對(duì)應(yīng)DNS解析服務(wù)器地址設(shè)置成如下信息

search mo9.com
nameserver  10.10.10.30
nameserver  10.10.10.31

備注:
設(shè)置search mo9.com是為了方便當(dāng)通過(guò)ssh + 主機(jī)名時(shí)可以直接登錄,dashboard訪問(wèn)worker節(jié)點(diǎn)便于解析對(duì)應(yīng)的主機(jī)采集數(shù)據(jù)

2.3 SSH免密登陸配置

所有操作均在 devops-k8s-n01節(jié)點(diǎn)上執(zhí)行,通過(guò)ansible執(zhí)行所有操作,所以需要添加devops機(jī)器到其它節(jié)點(diǎn)的ssh免密登陸,關(guān)于ssh密碼登陸此處不介紹

注意:

由于的主機(jī)關(guān)于dns解析,主機(jī)名設(shè)置,ssh免密登陸等基本配置,以及內(nèi)核參數(shù)基本優(yōu)化,在各Linux主機(jī)創(chuàng)建時(shí)通過(guò)系統(tǒng)初始化已配置完成。所以這里不再闡述!

三 k8s各節(jié)點(diǎn)主機(jī)初始化


這里所有的操作命令需要在kubernetes集群內(nèi)所有的主機(jī)上執(zhí)行,是安裝kubernetes集群環(huán)境所需要的基本設(shè)置。
3.1 安裝相關(guān)依賴包

yum install -y epel-release  conntrack ipvsadm \
    ipset jq sysstat curl libseccomp ntpdate ntp wget telnet rsync

備注:

這里的依賴包主要是為worker節(jié)點(diǎn)上kubelet,kube-proxy,docker,以及網(wǎng)絡(luò)插件組件安裝依賴的安裝包,其他包為基本網(wǎng)絡(luò)測(cè)試包,建議在集群內(nèi)所以機(jī)器上執(zhí)行,因?yàn)閒lanneld插件需要這些依賴包

3.2 關(guān)閉防火墻
在每臺(tái)機(jī)器上關(guān)閉防火墻,清理防火墻規(guī)則,設(shè)置默認(rèn)轉(zhuǎn)發(fā)策略:

systemctl stop firewalld >>/dev/null 2>&1
systemctl disable firewalld >>/dev/null 2>&1
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT

3.3 關(guān)閉 swap 分區(qū)
如果開(kāi)啟了 swap 分區(qū),則worker節(jié)點(diǎn)上的kubelet 組件會(huì)啟動(dòng)失敗(可以通過(guò)將參數(shù) --fail-swap-on 設(shè)置為 false 來(lái)忽略 swap on),故需要在每臺(tái)機(jī)器上關(guān)閉 swap 分區(qū)。同時(shí)注釋 /etc/fstab 中相應(yīng)的條目,防止開(kāi)機(jī)自動(dòng)掛載 swap 分區(qū):

swapoff -a  >>/dev/null 2>&1
sed -i 's/.*swap.*/#&/' /etc/fstab

3.4 關(guān)閉 SELinux
關(guān)閉 SELinux,否則后續(xù) K8S 掛載目錄時(shí)可能報(bào)錯(cuò) Permission denied:

setenforce  0 >>/dev/null 2>&1
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux  >>/dev/null 2>&1
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config  >>/dev/null 2>&1
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux >>/dev/null 2>&1
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config  >>/dev/null 2>&1

3.5 關(guān)閉 dnsmasq(可選)
linux 系統(tǒng)開(kāi)啟了 dnsmasq 后(如 GUI 環(huán)境),將系統(tǒng) DNS Server 設(shè)置為 127.0.0.1,這會(huì)導(dǎo)致 docker 容器無(wú)法解析域名,需要關(guān)閉它:

systemctl stop dnsmasq
systemctl disable dnsmasq

3.6 加載內(nèi)核模塊
主要是kube-proxy組件需要使用到ip_vs內(nèi)核模塊轉(zhuǎn)發(fā)pods應(yīng)用,實(shí)現(xiàn)endpoints路由;

sudo modprobe br_netfilter 
sudo modprobe ip_vs
sudo modprobe ip_conntrack

3.7 優(yōu)化內(nèi)核參數(shù)

sudo sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
sudo sed -i '/net.bridge.bridge-nf-call-iptables/d'  /etc/sysctl.conf
sudo sed -i '/net.bridge.bridge-nf-call-ip6tables/d'  /etc/sysctl.conf
sudo sed -i '/net.ipv4.ip_forward/d'  /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_tw_recycle/d'  /etc/sysctl.conf
sudo sed -i '/vm.swappiness/d'  /etc/sysctl.conf
sudo sed -i '/vm.overcommit_memory/d'  /etc/sysctl.conf
sudo sed -i '/vm.panic_on_oom/d'  /etc/sysctl.conf
sudo sed -i '/fs.inotify.max_user_watches/d'  /etc/sysctl.conf
sudo sed -i '/fs.file-max/d'  /etc/sysctl.conf
sudo sed -i '/fs.nr_open/d'  /etc/sysctl.conf
sudo sed -i '/net.ipv6.conf.all.disable_ipv6/d'  /etc/sysctl.conf
sudo sed -i '/net.netfilter.nf_conntrack_max/d'  /etc/sysctl.conf
cat >/etc/sysctl.d/kubernetes.conf<>/dev/null 2>&1
  • sed操作主要是為了防止sysctl.conf配置與新增的內(nèi)核參數(shù)沖突;
  • 必須關(guān)閉 tcp_tw_recycle,否則和 NAT 沖突,會(huì)導(dǎo)致服務(wù)不通;
  • 關(guān)閉 IPV6,防止觸發(fā) docker BUG;

3.8 設(shè)置系統(tǒng)時(shí)區(qū)

# 調(diào)整系統(tǒng) TimeZone
timedatectl set-timezone Asia/Shanghai

# 將當(dāng)前的 UTC 時(shí)間寫(xiě)入硬件時(shí)鐘
timedatectl set-local-rtc 0
hwclock -w

# 更新服務(wù)時(shí)間
ntpdate ntp1.aliyun.com

# 重啟依賴于系統(tǒng)時(shí)間的服務(wù)
systemctl restart rsyslog 
systemctl restart crond

3.9 關(guān)閉無(wú)關(guān)的服務(wù)

systemctl stop postfix && systemctl disable postfix

3.10 設(shè)置 rsyslogd 和 systemd journald(可選)

systemd 的 journald 是 Centos 7 缺省的日志記錄工具,它記錄了所有系統(tǒng)、內(nèi)核、Service Unit 的日志。相比 systemd,journald 記錄的日志有如下優(yōu)勢(shì):

  • 可以記錄到內(nèi)存或文件系統(tǒng);(默認(rèn)記錄到內(nèi)存,對(duì)應(yīng)的位置為 /run/log/jounal);
  • 可以限制占用的磁盤空間、保證磁盤剩余空間;
  • 可以限制日志文件大小、保存的時(shí)間;
  • journald 默認(rèn)將日志轉(zhuǎn)發(fā)給 rsyslog,這會(huì)導(dǎo)致日志寫(xiě)了多份,/var/log/messages 中包含了太多無(wú)關(guān)日志,不方便后續(xù)查看,同時(shí)也影響系統(tǒng)性能。
mkdir /var/log/journal # 持久化保存日志的目錄
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <

3.11 創(chuàng)建k8s服務(wù)運(yùn)行用戶及相關(guān)目錄

創(chuàng)建k8s組件服務(wù)運(yùn)行用戶
groupadd k8s
useradd -g k8s /var/lib/k8s -c "Kubernetes Service" -m -s /sbin/nologin  k8s

備注:kube-apiserver、controller-manager、scheduler、etcd為安全起見(jiàn),使用k8s服務(wù)賬號(hào)啟動(dòng);但是所有的worker節(jié)點(diǎn)上組件以及相關(guān)網(wǎng)絡(luò)組件因?yàn)樾枰褂胷oot賬號(hào)權(quán)限(如iptable設(shè)置)啟動(dòng),因此worker節(jié)點(diǎn)上服務(wù)賬號(hào)可以不創(chuàng)建!

創(chuàng)建k8s相關(guān)組件安裝主目錄以及證書(shū)存放目錄
mkdir -p /data/apps/k8s && mkdir -p /etc/k8s/ssl

3.12 升級(jí)內(nèi)核

CentOS 7.x 系統(tǒng)自帶的 3.10.x 內(nèi)核存在一些 Bugs,導(dǎo)致運(yùn)行的 Docker、Kubernetes 不穩(wěn)定,例如:

  • 高版本的 docker(1.13 以后) 啟用了 3.10 kernel 實(shí)驗(yàn)支持的 kernel memory account 功能(無(wú)法關(guān)閉),當(dāng)節(jié)點(diǎn)壓力大如頻繁啟動(dòng)和停止容器時(shí)會(huì)導(dǎo)致 cgroup memory leak;
  • 網(wǎng)絡(luò)設(shè)備引用計(jì)數(shù)泄漏,會(huì)導(dǎo)致類似于報(bào)錯(cuò):"kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1";

解決方案如下:

  • 升級(jí)內(nèi)核到 4.4.X 以上;
  • 手動(dòng)編譯內(nèi)核,disable CONFIG_MEMCG_KMEM 特性;
  • 安裝修復(fù)了該問(wèn)題的 Docker 18.09.1 及以上的版本。但由于 kubelet 也會(huì)設(shè)置 kmem(它 vendor 了 runc),所以需要重新編譯 kubelet 并指定 GOFLAGS="-tags=nokmem";
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
sudo grub2-set-default 0 >>/dev/null 2>&1

3.13 關(guān)閉 NUMA

# Disable numa for system.
sudo sed -i "s:numa=off::" /etc/sysconfig/grub
sudo sed -i "s:centos/swap  rhgb:& numa=off:" /etc/sysconfig/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg >>/dev/null 2>&1

4 控制機(jī)上安裝ansible工具


由于所有操作都在devops機(jī)器上操作,為對(duì)所有機(jī)器進(jìn)行命令操作,所有需要使用到ansible工具,將上述所有的命令根據(jù)服務(wù)器角色進(jìn)行批量命令操作。

4.1 安裝ansible工具

yum install ansible -y

4.2 根據(jù)服務(wù)器role創(chuàng)建ansible host文件進(jìn)行分組

[master_k8s_vgs]
master-k8s-n01     ansible_host=10.10.10.22
master-k8s-n02     ansible_host=10.10.10.23
master-k8s-n03     ansible_host=10.10.10.24

[worker_k8s_vgs]
worker-k8s-n01     ansible_host=10.10.10.40
worker-k8s-n02     ansible_host=10.10.10.41

[slb_ha_vgs]
ha-lvs-n01     ansible_host=10.10.10.1
ha-lvs-n02     ansible_host=10.10.10.2

4.3 系統(tǒng)初始化設(shè)置

將上述系統(tǒng)優(yōu)化里所有的命令對(duì)master_k8s_vgs,worker_k8s_vgs兩個(gè)組里所有服務(wù)器初始化操作,這里將上述命令編寫(xiě)成一個(gè)k8s初始化腳本并執(zhí)行ansible script腳本model,命令如下:

ansible master_k8s_vgs -m script -a "/home/gamaxwin/install_k8s_setup.sh" -b
ansible worker_k8s_vgs -m script -a "/home/gamaxwin/install_k8s_setup.sh" -b

至此k8s內(nèi)所有的節(jié)點(diǎn)系統(tǒng)初始化基本完成,出于集群的安全,還需要為k8s創(chuàng)建TLS雙向認(rèn)證證書(shū),請(qǐng)參考第二小節(jié):kubernetes集群安裝指南:創(chuàng)建CA證書(shū)及相關(guān)組件證書(shū)密鑰

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前名稱:kubernetes集群安裝指南:環(huán)境準(zhǔn)備及初始化系統(tǒng)-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://weahome.cn/article/dhppee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部