本系列文檔將介紹使用二進制文件部署最新 kubernetes v1.14.2 集群所有步驟,而不是使用 kubeadm 等自動化方式來部署集群。主要適合于有一定 kubernetes 基礎(chǔ),想通過一步步部署的方式來學習和了解系統(tǒng)相關(guān)配置、運行原理的同學。也同樣適用于測試或生產(chǎn)自建kubernetes集群等應用場景。
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作與策劃設(shè)計,尉犁網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:尉犁等地區(qū)。尉犁做網(wǎng)站價格咨詢:028-86922220
1.1 版本信息:
OS 系統(tǒng): Centos 7.6
kubernetes版本:v1.14.2
Etcd數(shù)據(jù)庫:v3.3.13
Network插件:Flanneld 0.11.0
Docker 版本: 18.09.6-CE
K8s插件:CoreDNS,Heapster,Influxdb,Grafana,Dashboard,elk,Metrics-server
1.2 架構(gòu)概覽:
其中:
采用keepalived主主模式結(jié)合haproxy tcp四層代理為kube apiserver提供高可用架構(gòu),內(nèi)網(wǎng)使用內(nèi)網(wǎng)VIP地址作為集群內(nèi)所有組件訪問地址;外網(wǎng)采用外網(wǎng)vip地址訪問,主要為Internet 客戶端訪問
使用keepalived+haproxy部署apiserver集群高可用;其他組件kube-controller-manager,kube-sheduler利用etcd選舉機制,與apiserver組件部署同一node上,在分別部署了三個節(jié)點,組成高可用集群;
同master節(jié)點所有組件部署在同一主機上,分別部署了三個節(jié)點,使用TLS開啟HTTPS雙向認證組成etcd高可用集群;
使用Flanneld打通master節(jié)點和node節(jié)點間網(wǎng)絡(luò),以便集群各個節(jié)點網(wǎng)絡(luò)互通(亦可以使用calico網(wǎng)絡(luò));
在devops機器上部署了kubectl以及kubens,其中kubectl主要是對kubernetes的object資源進行rest操作,kubens主要是用于ns切換
使用 vmware harboar作為docker私有鏡像鏡像;提供私有鏡像pull,push,從而對私有的鏡像進行管理
主機名 | 內(nèi)網(wǎng)IP | 外網(wǎng)IP | 服務器角色 | 部署軟件或應用 |
---|---|---|---|---|
devops-k8s-n01 | 10.10.10.21 | 192.168.20.21 | 運維控制發(fā)布機 | kubectl, kubens, ansible, cffss |
lvs-ha-n01 | 10.10.10.30 | 192.168.20.30 | slb負載均衡器 | keepalived, haproxy, bind |
lvs-ha-n02 | 10.10.10.31 | 192.168.20.31 | slb負載均衡器 | keepalived, haproxy, bind |
master-k8s-n01 | 10.10.10.22 | 192.168.20.22 | master節(jié)點01 | master節(jié)點所有組件, flanneld插件 |
master-k8s-n02 | 10.10.10.23 | 192.168.20.23 | master節(jié)點02 | master節(jié)點相關(guān)組件, flanneld插件 |
master-ks8-n03 | 10.10.10.24 | 192.168.20.24 | master節(jié)點03 | master節(jié)點相關(guān)組件, flanneld插件 |
worker-k8s-n01 | 10.10.10.40 | 192.168.20.40 | worker節(jié)點01 | worker節(jié)點相關(guān)組件, flanneld插件 |
worker-k8s-n02 | 10.10.10.41 | 192.168.20.41 | worker節(jié)點02 | worker節(jié)點相關(guān)組件, flanneld插件 |
docker-hub-server | 10.10.10.20 | 192.168.20.20 | docker鏡像倉庫 | docker, docker-compose, harbor |
1.3. 組件訪問策略
基于Keepalived+ Haproxy 四層透明代理實現(xiàn)高可用;
開啟非安全端口 8080 和關(guān)閉匿名訪問,基于token訪問;
在安全端口 6443 接收 https 請求;
嚴格的認證和授權(quán)策略 (x509、token、RBAC);
開啟 bootstrap token 認證,支持 kubelet TLS bootstrapping;
3 節(jié)點高可用;
開啟安全端口,在安全端口 10252 接收 https 請求;
使用 kubeconfig 訪問 apiserver 的安全端口;
自動 approve kubelet 證書簽名請求 (CSR),證書過期后自動輪轉(zhuǎn);
在bind配置文件里添加以下解析記錄,這里以mo9.com為 域名后綴,bind服務安裝此處忽略。
解析A記錄字段 | 域名后綴 | 解析IP | 備注 |
---|---|---|---|
lvs-ha-n01 | mo9.com | 10.10.10.30 | slb負載均衡器01,ssh主機使用 |
lvs-ha-n02 | mo9.com | 10.10.10.31 | slb負載均衡器 02,ssh主機使用 |
master-k8s-n01 | mo9.com | 10.10.10.22 | 設(shè)置master節(jié)點01域名以方便metric數(shù)據(jù)采集 |
master-k8s-n02 | mo9.com | 10.10.10.23 | 設(shè)置master節(jié)點02域名以方便metric數(shù)據(jù)采集 |
master-k8s-n03 | mo9.com | 10.10.10.24 | 設(shè)置master節(jié)點03域名以方便metric數(shù)據(jù)采集 |
worker-k8s-n01 | mo9.com | 10.10.10.40 | 設(shè)置worker 節(jié)點01域名以方便metric數(shù)據(jù)采集 |
worker-k8s-n02 | mo9.com | 10.10.10.41 | 設(shè)置worker 節(jié)點01域名以方便metric數(shù)據(jù)采集 |
registry-mirrors | mo9.com | 10.10.10.20 | docker鏡像私有倉庫域名,私有鏡像上傳下載使用 |
dev-kube-api | mo9.com | 10.10.10.100 | apiserver集群訪問域名, 所有組件通過該域名訪問apiserver |
dev-kube-api | mo9.com | 192.168.20.100 | apiserver集群外網(wǎng)訪問域名, 外網(wǎng)用戶通過該域名訪問 |
備注:
這里需要要添加相關(guān)主機的域名解析,因為kubelet配置里hostname值是主機名時,不設(shè)置會導致dashboard上看不到pod日志輸出error,提示無法機械節(jié)點域名;亦可以將該值設(shè)置成ip,避免無法訪問10250端口服務,當然可以通過hosts方式將上述信息寫到每個node上的/etc/hosts文件內(nèi)
將對應主機hostname信息設(shè)置成表1信息所示的主機名
hostnamectl set-hostname 主機名
在各個Linux主機上將對應DNS解析服務器地址設(shè)置成如下信息
search mo9.com
nameserver 10.10.10.30
nameserver 10.10.10.31
備注:
設(shè)置search mo9.com是為了方便當通過ssh + 主機名時可以直接登錄,dashboard訪問worker節(jié)點便于解析對應的主機采集數(shù)據(jù)
所有操作均在 devops-k8s-n01節(jié)點上執(zhí)行,通過ansible執(zhí)行所有操作,所以需要添加devops機器到其它節(jié)點的ssh免密登陸,關(guān)于ssh密碼登陸此處不介紹
由于的主機關(guān)于dns解析,主機名設(shè)置,ssh免密登陸等基本配置,以及內(nèi)核參數(shù)基本優(yōu)化,在各Linux主機創(chuàng)建時通過系統(tǒng)初始化已配置完成。所以這里不再闡述!
這里所有的操作命令需要在kubernetes集群內(nèi)所有的主機上執(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é)點上kubelet,kube-proxy,docker,以及網(wǎng)絡(luò)插件組件安裝依賴的安裝包,其他包為基本網(wǎng)絡(luò)測試包,建議在集群內(nèi)所以機器上執(zhí)行,因為flanneld插件需要這些依賴包
3.2 關(guān)閉防火墻
在每臺機器上關(guān)閉防火墻,清理防火墻規(guī)則,設(shè)置默認轉(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ū)
如果開啟了 swap 分區(qū),則worker節(jié)點上的kubelet 組件會啟動失敗(可以通過將參數(shù) --fail-swap-on 設(shè)置為 false 來忽略 swap on),故需要在每臺機器上關(guān)閉 swap 分區(qū)。同時注釋 /etc/fstab 中相應的條目,防止開機自動掛載 swap 分區(qū):
swapoff -a >>/dev/null 2>&1
sed -i 's/.*swap.*/#&/' /etc/fstab
3.4 關(guān)閉 SELinux
關(guān)閉 SELinux,否則后續(xù) K8S 掛載目錄時可能報錯 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)開啟了 dnsmasq 后(如 GUI 環(huán)境),將系統(tǒng) DNS Server 設(shè)置為 127.0.0.1,這會導致 docker 容器無法解析域名,需要關(guān)閉它:
systemctl stop dnsmasq
systemctl disable dnsmasq
3.6 加載內(nèi)核模塊
主要是kube-proxy組件需要使用到ip_vs內(nèi)核模塊轉(zhuǎn)發(fā)pods應用,實現(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<<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
sysctl -p /etc/sysctl.d/kubernetes.conf >>/dev/null 2>&1
3.8 設(shè)置系統(tǒng)時區(qū)
# 調(diào)整系統(tǒng) TimeZone
timedatectl set-timezone Asia/Shanghai
# 將當前的 UTC 時間寫入硬件時鐘
timedatectl set-local-rtc 0
hwclock -w
# 更新服務時間
ntpdate ntp1.aliyun.com
# 重啟依賴于系統(tǒng)時間的服務
systemctl restart rsyslog
systemctl restart crond
3.9 關(guān)閉無關(guān)的服務
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)勢:
mkdir /var/log/journal # 持久化保存日志的目錄
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盤
Storage=persistent
# 壓縮歷史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空間 10G
SystemMaxUse=10G
# 單日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存時間 2 周
MaxRetentionSec=2week
# 不將日志轉(zhuǎn)發(fā)到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
3.11 創(chuàng)建k8s服務運行用戶及相關(guān)目錄
groupadd k8s
useradd -g k8s /var/lib/k8s -c "Kubernetes Service" -m -s /sbin/nologin k8s
備注:kube-apiserver、controller-manager、scheduler、etcd為安全起見,使用k8s服務賬號啟動;但是所有的worker節(jié)點上組件以及相關(guān)網(wǎng)絡(luò)組件因為需要使用root賬號權(quán)限(如iptable設(shè)置)啟動,因此worker節(jié)點上服務賬號可以不創(chuàng)建!
mkdir -p /data/apps/k8s && mkdir -p /etc/k8s/ssl
3.12 升級內(nèi)核
CentOS 7.x 系統(tǒng)自帶的 3.10.x 內(nèi)核存在一些 Bugs,導致運行的 Docker、Kubernetes 不穩(wěn)定,例如:
解決方案如下:
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
由于所有操作都在devops機器上操作,為對所有機器進行命令操作,所有需要使用到ansible工具,將上述所有的命令根據(jù)服務器角色進行批量命令操作。
4.1 安裝ansible工具
yum install ansible -y
4.2 根據(jù)服務器role創(chuàng)建ansible host文件進行分組
[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)化
里所有的命令對master_k8s_vgs,worker_k8s_vgs兩個組里所有服務器初始化操作,這里將上述命令編寫成一個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é)點系統(tǒng)初始化基本完成,出于集群的安全,還需要為k8s創(chuàng)建TLS雙向認證證書,請參考第二小節(jié):kubernetes集群安裝指南:創(chuàng)建CA證書及相關(guān)組件證書密鑰
網(wǎng)頁標題:kubernetes集群安裝指南:環(huán)境準備及初始化系統(tǒng)
當前地址:http://redsoil1982.com.cn/article4/pdsjoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、微信公眾號、標簽優(yōu)化、移動網(wǎng)站建設(shè)、搜索引擎優(yōu)化、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)