91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

kubernetes集群安裝指南:環境準備及初始化系統

發布時間:2020-07-03 22:35:06 來源:網絡 閱讀:932 作者:清白之年 欄目:云計算

本系列文檔將介紹使用二進制文件部署最新 kubernetes v1.14.2 集群所有步驟,而不是使用 kubeadm 等自動化方式來部署集群。主要適合于有一定 kubernetes 基礎,想通過一步步部署的方式來學習和了解系統相關配置、運行原理的同學。也同樣適用于測試或生產自建kubernetes集群等應用場景。

一 環境準備


1.1 版本信息

  • OS 系統: Centos 7.6

  • kubernetes版本:v1.14.2

  • Etcd數據庫:v3.3.13

  • Network插件:Flanneld 0.11.0

  • Docker 版本: 18.09.6-CE

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

  • Docker倉庫:Harbor

1.2 架構概覽:

kubernetes集群安裝指南:環境準備及初始化系統
其中:

負載均衡

采用keepalived主主模式結合haproxy tcp四層代理為kube apiserver提供高可用架構,內網使用內網VIP地址作為集群內所有組件訪問地址;外網采用外網vip地址訪問,主要為Internet 客戶端訪問

master集群:

使用keepalived+haproxy部署apiserver集群高可用;其他組件kube-controller-manager,kube-sheduler利用etcd選舉機制,與apiserver組件部署同一node上,在分別部署了三個節點,組成高可用集群;

etcd集群:

同master節點所有組件部署在同一主機上,分別部署了三個節點,使用TLS開啟HTTPS雙向認證組成etcd高可用集群;

網絡:

使用Flanneld打通master節點和node節點間網絡,以便集群各個節點網絡互通(亦可以使用calico網絡);

客戶端:

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

docker鏡像倉庫:

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

相關服務器信息如下圖1所示:
主機名 內網IP 外網IP 服務器角色 部署軟件或應用
devops-k8s-n01 10.10.10.21 192.168.20.21 運維控制發布機 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節點01 master節點所有組件, flanneld插件
master-k8s-n02 10.10.10.23 192.168.20.23 master節點02 master節點相關組件, flanneld插件
master-ks8-n03 10.10.10.24 192.168.20.24 master節點03 master節點相關組件, flanneld插件
worker-k8s-n01 10.10.10.40 192.168.20.40 worker節點01 worker節點相關組件, flanneld插件
worker-k8s-n02 10.10.10.41 192.168.20.41 worker節點02 worker節點相關組件, flanneld插件
docker-hub-server 10.10.10.20 192.168.20.20 docker鏡像倉庫 docker, docker-compose, harbor

1.3. 組件訪問策略

1.3.1 kube-apiserver:
  • 基于Keepalived+ Haproxy 四層透明代理實現高可用;

  • 開啟非安全端口 8080 和關閉匿名訪問,基于token訪問;

  • 在安全端口 6443 接收 https 請求;

  • 嚴格的認證和授權策略 (x509、token、RBAC);

  • 開啟 bootstrap token 認證,支持 kubelet TLS bootstrapping;

  • 使用 https 訪問 kubelet、etcd,加密通信;
1.3.2 kube-controller-manager:
  • 3 節點高可用;

  • 開啟安全端口,在安全端口 10252 接收 https 請求;

  • 使用 kubeconfig 訪問 apiserver 的安全端口;

  • 自動 approve kubelet 證書簽名請求 (CSR),證書過期后自動輪轉;

  • 各 controller 使用自己的 ServiceAccount 訪問 apiserver;
1.3.3 kube-scheduler:
  • 3 節點高可用;
  • 使用 kubeconfig 訪問 apiserver 的安全端口;
1.3.4 kubelet:
  • 使用 kubeadm 動態創建 bootstrap token,而不是在 apiserver 中靜態配置;
  • 使用 TLS bootstrap 機制自動生成 client 和 server 證書,過期后自動輪轉;
  • 在 KubeletConfiguration 類型的 JSON 文件配置主要參數;
  • 關閉只讀端口,在安全端口 10250 接收 https 請求,對請求進行認證和授權,拒絕匿名訪問和非授權訪問;
  • 使用 kubeconfig 訪問 apiserver 的安全端口;
1.3.5 kube-proxy:
  • 使用 kubeconfig 訪問 apiserver 的安全端口;
  • 在 KubeProxyConfiguration 類型的 JSON 文件配置主要參數;
  • 使用 ipvs 代理模式;

二 系統基本設置


2.1 域名設置

在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 設置master節點01域名以方便metric數據采集
master-k8s-n02 mo9.com 10.10.10.23 設置master節點02域名以方便metric數據采集
master-k8s-n03 mo9.com 10.10.10.24 設置master節點03域名以方便metric數據采集
worker-k8s-n01 mo9.com 10.10.10.40 設置worker 節點01域名以方便metric數據采集
worker-k8s-n02 mo9.com 10.10.10.41 設置worker 節點01域名以方便metric數據采集
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集群外網訪問域名, 外網用戶通過該域名訪問

備注:
這里需要要添加相關主機的域名解析,因為kubelet配置里hostname值是主機名時,不設置會導致dashboard上看不到pod日志輸出error,提示無法機械節點域名;亦可以將該值設置成ip,避免無法訪問10250端口服務,當然可以通過hosts方式將上述信息寫到每個node上的/etc/hosts文件內

2.2 機器主機名設置及DNS解析地址設置
主機名設置

將對應主機hostname信息設置成表1信息所示的主機名

hostnamectl set-hostname  主機名
各node主機dns解析設置

在各個Linux主機上將對應DNS解析服務器地址設置成如下信息

search mo9.com
nameserver  10.10.10.30
nameserver  10.10.10.31

備注:
設置search mo9.com是為了方便當通過ssh + 主機名時可以直接登錄,dashboard訪問worker節點便于解析對應的主機采集數據

2.3 SSH免密登陸配置

所有操作均在 devops-k8s-n01節點上執行,通過ansible執行所有操作,所以需要添加devops機器到其它節點的ssh免密登陸,關于ssh密碼登陸此處不介紹

注意:

由于的主機關于dns解析,主機名設置,ssh免密登陸等基本配置,以及內核參數基本優化,在各Linux主機創建時通過系統初始化已配置完成。所以這里不再闡述!

三 k8s各節點主機初始化


這里所有的操作命令需要在kubernetes集群內所有的主機上執行,是安裝kubernetes集群環境所需要的基本設置。
3.1 安裝相關依賴包

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

備注:

這里的依賴包主要是為worker節點上kubelet,kube-proxy,docker,以及網絡插件組件安裝依賴的安裝包,其他包為基本網絡測試包,建議在集群內所以機器上執行,因為flanneld插件需要這些依賴包

3.2 關閉防火墻
在每臺機器上關閉防火墻,清理防火墻規則,設置默認轉發策略:

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 關閉 swap 分區
如果開啟了 swap 分區,則worker節點上的kubelet 組件會啟動失敗(可以通過將參數 --fail-swap-on 設置為 false 來忽略 swap on),故需要在每臺機器上關閉 swap 分區。同時注釋 /etc/fstab 中相應的條目,防止開機自動掛載 swap 分區:

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

3.4 關閉 SELinux
關閉 SELinux,否則后續 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 關閉 dnsmasq(可選)
linux 系統開啟了 dnsmasq 后(如 GUI 環境),將系統 DNS Server 設置為 127.0.0.1,這會導致 docker 容器無法解析域名,需要關閉它:

systemctl stop dnsmasq
systemctl disable dnsmasq

3.6 加載內核模塊
主要是kube-proxy組件需要使用到ip_vs內核模塊轉發pods應用,實現endpoints路由;

sudo modprobe br_netfilter 
sudo modprobe ip_vs
sudo modprobe ip_conntrack 

3.7 優化內核參數

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
  • sed操作主要是為了防止sysctl.conf配置與新增的內核參數沖突;
  • 必須關閉 tcp_tw_recycle,否則和 NAT 沖突,會導致服務不通;
  • 關閉 IPV6,防止觸發 docker BUG;

3.8 設置系統時區

# 調整系統 TimeZone
timedatectl set-timezone Asia/Shanghai

# 將當前的 UTC 時間寫入硬件時鐘
timedatectl set-local-rtc 0
hwclock -w

# 更新服務時間
ntpdate ntp1.aliyun.com

# 重啟依賴于系統時間的服務
systemctl restart rsyslog 
systemctl restart crond

3.9 關閉無關的服務

systemctl stop postfix && systemctl disable postfix

3.10 設置 rsyslogd 和 systemd journald(可選)

systemd 的 journald 是 Centos 7 缺省的日志記錄工具,它記錄了所有系統、內核、Service Unit 的日志。相比 systemd,journald 記錄的日志有如下優勢:

  • 可以記錄到內存或文件系統;(默認記錄到內存,對應的位置為 /run/log/jounal);
  • 可以限制占用的磁盤空間、保證磁盤剩余空間;
  • 可以限制日志文件大小、保存的時間;
  • journald 默認將日志轉發給 rsyslog,這會導致日志寫了多份,/var/log/messages 中包含了太多無關日志,不方便后續查看,同時也影響系統性能。
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

# 不將日志轉發到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald

3.11 創建k8s服務運行用戶及相關目錄

創建k8s組件服務運行用戶
groupadd k8s
useradd -g k8s /var/lib/k8s -c "Kubernetes Service" -m -s /sbin/nologin  k8s

備注:kube-apiserver、controller-manager、scheduler、etcd為安全起見,使用k8s服務賬號啟動;但是所有的worker節點上組件以及相關網絡組件因為需要使用root賬號權限(如iptable設置)啟動,因此worker節點上服務賬號可以不創建!

創建k8s相關組件安裝主目錄以及證書存放目錄
mkdir -p /data/apps/k8s && mkdir -p /etc/k8s/ssl

3.12 升級內核

CentOS 7.x 系統自帶的 3.10.x 內核存在一些 Bugs,導致運行的 Docker、Kubernetes 不穩定,例如:

  • 高版本的 docker(1.13 以后) 啟用了 3.10 kernel 實驗支持的 kernel memory account 功能(無法關閉),當節點壓力大如頻繁啟動和停止容器時會導致 cgroup memory leak;
  • 網絡設備引用計數泄漏,會導致類似于報錯:"kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1";

解決方案如下:

  • 升級內核到 4.4.X 以上;
  • 手動編譯內核,disable CONFIG_MEMCG_KMEM 特性;
  • 安裝修復了該問題的 Docker 18.09.1 及以上的版本。但由于 kubelet 也會設置 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 關閉 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 控制機上安裝ansible工具


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

4.1 安裝ansible工具

yum install ansible -y

4.2 根據服務器role創建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 系統初始化設置

將上述系統優化里所有的命令對master_k8s_vgs,worker_k8s_vgs兩個組里所有服務器初始化操作,這里將上述命令編寫成一個k8s初始化腳本并執行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內所有的節點系統初始化基本完成,出于集群的安全,還需要為k8s創建TLS雙向認證證書,請參考第二小節:kubernetes集群安裝指南:創建CA證書及相關組件證書密鑰

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巨鹿县| 武功县| 格尔木市| 宁远县| 大埔区| 凉城县| 莫力| 郴州市| 资溪县| 宁蒗| 文登市| 明星| 中山市| 临汾市| 滨州市| 左权县| 应城市| 大关县| 沁水县| 大冶市| 陕西省| 旬邑县| 镇远县| 精河县| 贞丰县| 宜兰市| 维西| 平昌县| 崇左市| 卓尼县| 温泉县| 汶川县| 宣恩县| 姜堰市| 高台县| 望城县| 泰来县| 都兰县| 衡阳县| 凤山市| 武汉市|