日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RKE方式部署Kubernetes集群

發(fā)布時(shí)間:2024/3/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RKE方式部署Kubernetes集群 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

####1、配置要求link
參考節(jié)點(diǎn)要求
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/requirements

####2、主機(jī)名配置
因?yàn)镵8S的規(guī)定,主機(jī)名只支持包含 - 和 .(中橫線和點(diǎn))兩種特殊符號,并且主機(jī)名不能出現(xiàn)重復(fù)。

hostnamectl set-hostname rke.thinkmap.xyz
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname node04
hostnamectl set-hostname node05


####3、Hosts
配置每臺(tái)主機(jī)的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。
cat /etc/hosts
172.16.1.90 ? rke.thinkmap.xyz
172.16.1.91 ? node01
172.16.1.92 ? node02
172.16.1.93 ? node03
172.16.1.94 ? node04
172.16.1.95 ? node05

####4、每個(gè)節(jié)點(diǎn)創(chuàng)建docker用戶,設(shè)置sudo權(quán)限

?? ?useradd -d /home/thinkmap -m thinkmap
?? ?echo "thinkmap"|passwd --stdin thinkmap
?? ?echo "thinkmap ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/thinkmap
?? ?chmod 0440 /etc/sudoers.d/thinkmap
?? ?sed -i s'/Defaults requiretty/Defaults requiretty'/g /etc/sudoers
? ? ?
? ? sudo usermod -aG docker thinkmap

####5、配置相互間的ssh信任關(guān)系
?? ?現(xiàn)在ceph-admin節(jié)點(diǎn)上產(chǎn)生公私鑰文件,然后將ceph-admin節(jié)點(diǎn)的.ssh目錄拷貝給其他節(jié)點(diǎn)
?? ?[root@rke ~]su thinkmap
?? ?[thinkmap@rke ~]$ ssh-keygen -t rsa ? ?一路回車
?? ?[thinkmap@rke ~]$ cd .ssh/
?? ?[thinkmap@rke .ssh]$ ls
?? ?id_rsa ?id_rsa.pub
?? ?[thinkmap@rke .ssh]$ cp id_rsa.pub authorized_keys?
?? ?[thinkmap@rke .ssh]$ scp -r /home/thinkmap/.ssh node01.thinkmap.ai:/home/thinkmap/
?? ?[thinkmap@rke .ssh]$ scp -r /home/thinkmap/.ssh node02.thinkmap.ai:/home/thinkmap/
?? ?[thinkmap@rke .ssh]$ scp -r /home/thinkmap/.ssh node03.thinkmap.ai:/home/thinkmap/
?? ??
?? ?然后在各節(jié)點(diǎn)直接驗(yàn)證ceph用戶下的ssh相互信任關(guān)系
?? ?$ ssh -p22 thinkmap@node01.thinkmap.ai
?? ?$ ssh -p22 thinkmap@node02.thinkmap.ai
?? ?$ ssh -p22 thinkmap@node03.thinkmap.ai

####6、CentOS關(guān)閉selinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

####7、關(guān)閉防火墻(可選)或者放行相應(yīng)端口
對于剛剛接觸Rancher的用戶,建議在關(guān)閉防火墻的測試環(huán)境或桌面虛擬機(jī)來運(yùn)行rancher,以避免出現(xiàn)網(wǎng)絡(luò)通信問題。
關(guān)閉防火墻

1、CentOS
systemctl stop firewalld.service && systemctl disable firewalld.service

2、Ubuntu
ufw disable

端口放行
端口放行請查看端口需求

####8、配置主機(jī)時(shí)間、時(shí)區(qū)、系統(tǒng)語言、yum源
查看時(shí)區(qū):
date -R或者 timedatectl

修改時(shí)區(qū):
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改系統(tǒng)語言環(huán)境:

sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile
配置主機(jī)NTP時(shí)間同步

配置kubernetes.repo的阿里云yum源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

####9、配置主機(jī)DNS
對于類似Ubuntu 18這類默認(rèn)使用systemd-resolve管理DNS的系統(tǒng),建議禁用systemd-resolved服務(wù),然后手動(dòng)配置DNS。

操作方法:

禁用systemd-resolved.service

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service
rm -rf /etc/resolv.conf ; touch /etc/resolv.conf
接著編輯/etc/resolv.conf添加DNS服務(wù)器

重啟docker服務(wù)

systemctl daemon-reload ; systemctl restart docker

####10、主機(jī)OS調(diào)優(yōu)
一、內(nèi)核調(diào)優(yōu)
echo "
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
net.ipv4.neigh.default.gc_interval=60
net.ipv4.neigh.default.gc_stale_time=120
" >> /etc/sysctl.conf

接著執(zhí)行 sysctl -p

二、nofile
cat >> /etc/security/limits.conf << EOF
?* ? ? ? ? ? soft ? nofile ? ? ? 65536
?* ? ? ? ? ? hard ? nofile ? ? ? 65536
?* ? ? ? ? ? soft ? nproc ? ? ? ?65536
?* ? ? ? ? ? hard ? nproc ? ? ? ?65536
EOF

三、啟用cgroup
修改配置文件/etc/default/grub,啟用cgroup內(nèi)存限額功能,配置兩個(gè)參數(shù):
sudo vim /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

####11、內(nèi)核模塊
警告
如果要使用ceph存儲(chǔ)相關(guān)功能,需保證worker節(jié)點(diǎn)加載RBD模塊
以下模塊需要在主機(jī)上加載
模塊列表
模塊查詢: lsmod | grep <模塊名>
模塊加載: modprobe <模塊名>


####二、Docker安裝與配置
1、Docker安裝
修改系統(tǒng)源
一、Ubuntu 16.04.x
二、Ubuntu 18.04.x
三、Centos7.x
Docker-ce安裝

一、Ubuntu
二、Centos
2、Docker配置
對于通過systemd來管理服務(wù)的系統(tǒng)(比如CentOS7.X、Ubuntu16.X), Docker有兩處可以配置參數(shù): 一個(gè)是docker.service服務(wù)配置文件,一個(gè)是Docker daemon配置文件daemon.json。

docker.service

對于CentOS系統(tǒng),docker.service默認(rèn)位于/usr/lib/systemd/system/docker.service;對于Ubuntu系統(tǒng),docker.service默認(rèn)位于/lib/systemd/system/docker.service

daemon.json

daemon.json默認(rèn)位于/etc/docker/daemon.json,如果沒有可手動(dòng)創(chuàng)建,基于systemd管理的系統(tǒng)都是相同的路徑。通過修改daemon.json來改過Docker配置,也是Docker官方推薦的方法。

以下說明均基于systemd,并通過/etc/docker/daemon.json來修改配置。

配置鏡像下載和上傳并發(fā)數(shù)
從Docker1.12開始,支持自定義下載和上傳鏡像的并發(fā)數(shù),默認(rèn)值上傳為3個(gè)并發(fā),下載為5個(gè)并發(fā)。通過添加”max-concurrent-downloads”和”max-concurrent-uploads”參數(shù)對其修改:

"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5
配置鏡像加速地址
Rancher從v1.6.15開始到v2.x.x,Rancher系統(tǒng)相關(guān)的所有鏡像(包括1.6.x上的K8S鏡像)都托管在Dockerhub倉庫。Dockerhub節(jié)點(diǎn)在國外,國內(nèi)直接拉取鏡像會(huì)有些緩慢。為了加速鏡像的下載,可以給Docker配置國內(nèi)的鏡像地址。

編輯/etc/docker/daemon.json加入以下內(nèi)容

{
"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://IP:PORT/"]
}
可以設(shè)置多個(gè)registry-mirrors地址,以數(shù)組形式書寫,地址需要添加協(xié)議頭(https或者h(yuǎn)ttp)。

配置insecure-registries私有倉庫
Docker默認(rèn)只信任TLS加密的倉庫地址(https),所有非https倉庫默認(rèn)無法登陸也無法拉取鏡像。insecure-registries字面意思為不安全的倉庫,通過添加這個(gè)參數(shù)對非https倉庫進(jìn)行授信。可以設(shè)置多個(gè)insecure-registries地址,以數(shù)組形式書寫,地址不能添加協(xié)議頭(http)。

編輯/etc/docker/daemon.json加入以下內(nèi)容:

{
"insecure-registries": ["192.168.1.100","IP:PORT"]
}
配置Docker存儲(chǔ)驅(qū)動(dòng)
OverlayFS是一個(gè)新一代的聯(lián)合文件系統(tǒng),類似于AUFS,但速度更快,實(shí)現(xiàn)更簡單。Docker為OverlayFS提供了兩個(gè)存儲(chǔ)驅(qū)動(dòng)程序:舊版的overlay,新版的overlay2(更穩(wěn)定)。

先決條件:

overlay2: Linux內(nèi)核版本4.0或更高版本,或使用內(nèi)核版本3.10.0-514+的RHEL或CentOS。
overlay: 主機(jī)Linux內(nèi)核版本3.18+
支持的磁盤文件系統(tǒng)
ext4(僅限RHEL 7.1)
xfs(RHEL7.2及更高版本),需要啟用d_type=true。 >具體詳情參考 Docker Use the OverlayFS storage driver
編輯/etc/docker/daemon.json加入以下內(nèi)容

{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}

配置日志驅(qū)動(dòng)
容器在運(yùn)行時(shí)會(huì)產(chǎn)生大量日志文件,很容易占滿磁盤空間。通過配置日志驅(qū)動(dòng)來限制文件大小與文件的數(shù)量。 >限制單個(gè)日志文件為100M,最多產(chǎn)生3個(gè)日志文件

{
"log-driver": "json-file",
"log-opts": {
? ? "max-size": "100m",
? ? "max-file": "3"
? ? }
}
3、Ubuntu\Debian系統(tǒng) ,docker info提示W(wǎng)ARNING: No swap limit support
Ubuntu\Debian系統(tǒng)下,默認(rèn)cgroups未開啟swap account功能,這樣會(huì)導(dǎo)致設(shè)置容器內(nèi)存或者swap資源限制不生效。可以通過以下命令解決:

#####統(tǒng)一網(wǎng)卡名稱為ethx
sudo sed -i 's/en[[:alnum:]]*/eth0/g' /etc/network/interfaces;
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 cgroup_enable=memory swapaccount=1 biosdevname=0 \1"/g' /etc/default/grub;
sudo update-grub;
注意
通過以上命令可自動(dòng)配置參數(shù),如果/etc/default/grub非默認(rèn)配置,需根據(jù)實(shí)際參數(shù)做調(diào)整。
提示
以上配置完成后,建議重啟一次主機(jī)。

4、更多配置請?jiān)L問最佳實(shí)踐


2 - ETCD調(diào)優(yōu)
一、磁盤IOPS
etcd對磁盤寫入延遲非常敏感,通常需要50順序?qū)懭隝OPS(例如: 7200RPM磁盤)。對于負(fù)載較重的集群,建議使用500順序?qū)懭隝OPS(例如,典型的本地SSD或高性能虛擬化塊設(shè)備)。
請注意,大多數(shù)云服務(wù)器或者云存儲(chǔ)提供并發(fā)IOPS而不是順序IOPS,提供的并發(fā)IOPS可能比順序IOPS大10倍。為了測量實(shí)際的順序IOPS,建議使用磁盤基準(zhǔn)測試工具,如diskbench或fio。

PS
常見磁盤平均物理尋道時(shí)間約為:
7200轉(zhuǎn)/分的STAT硬盤平均物理尋道時(shí)間是9ms
10000轉(zhuǎn)/分的STAT硬盤平均物理尋道時(shí)間是6ms
15000轉(zhuǎn)/分的SAS硬盤平均物理尋道時(shí)間是4ms

常見硬盤的旋轉(zhuǎn)延遲時(shí)間約為:
7200 rpm的磁盤平均旋轉(zhuǎn)延遲大約為60X1000/7200/2=4.17ms
10000 rpm的磁盤平均旋轉(zhuǎn)延遲大約為60X1000/10000/2=3ms,
15000 rpm的磁盤其平均旋轉(zhuǎn)延遲約為60X1000/15000/2=2ms。

最大IOPS的理論計(jì)算方法:
IOPS=1000ms/(尋道時(shí)間+旋轉(zhuǎn)延遲)。忽略數(shù)據(jù)傳輸時(shí)間。
7200 rpm的磁盤IOPS=1000/(9+4.17)=76IOPS
10000 rpm的磁盤IOPS=1000/(6+3)=111IOPS
15000 rpm的磁盤IOPS=1000/(4+2)=166IOPS

二、磁盤IO優(yōu)先級
由于etcd必須將數(shù)據(jù)持久保存到磁盤日志文件中,因此來自其他進(jìn)程的磁盤活動(dòng)可能會(huì)導(dǎo)致增加寫入時(shí)間,結(jié)果可能會(huì)導(dǎo)致etcd請求超時(shí)和臨時(shí)leader丟失。當(dāng)給定高磁盤優(yōu)先級時(shí),etcd服務(wù)可以穩(wěn)定地與這些進(jìn)程一起運(yùn)行。

在Linux上,etcd的磁盤優(yōu)先級可以配置為ionice:

sudo ionice -c2 -n0 -p $(pgrep etcd)
溫馨提示
: 因?yàn)橹鳈C(jī)重啟或者容器重啟后,容器中進(jìn)程的PID會(huì)發(fā)生變化,所以建議把以上命令放在系統(tǒng)的啟動(dòng)腳本中(比如Ubuntu的/etc/init.d/rc.local腳本中),并且把命令配置在crontab定時(shí)任務(wù)中。

三、修改空間配額大小
默認(rèn)ETCD空間配額大小為2G,超過2G將不再寫入數(shù)據(jù)。通過給ETCD配置--quota-backend-bytes參數(shù)增大空間配額,最大支持8G。

RKE或者Rancher UI自定義部署集群的時(shí)候,在yaml文件中指定以下參數(shù)

services:
? etcd:
? ? # 開啟自動(dòng)備份
? ? ## rke版本大于等于0.2.x或rancher版本大于等于2.2.0時(shí)使用
? ? backup_config:
? ? ? enabled: true
? ? ? interval_hours: 12
? ? ? retention: 6
? ? ## rke版本小于0.2.x或rancher版本小于2.2.0時(shí)使用
? ? snapshot: true
? ? creation: 5m0s
? ? retention: 24h
? ? # 修改空間配額為$((6*1024*1024*1024)),默認(rèn)2G,最大8G
? ? extra_args:
? ? ? quota-backend-bytes: '6442450944'
? ? ? auto-compaction-retention: 240 #(單位小時(shí))
磁盤碎片整理
通過auto-compaction-retention對歷史數(shù)據(jù)壓縮后,后端數(shù)據(jù)庫可能會(huì)出現(xiàn)內(nèi)部碎片。內(nèi)部碎片是指空閑狀態(tài)的,能被后端使用但是仍然消耗存儲(chǔ)空間,碎片整理過程將此存儲(chǔ)空間釋放回文件系統(tǒng)。

要對etcd進(jìn)行碎片整理,需手動(dòng)在etcd容器中執(zhí)行以下命令:

etcdctl defrag

Finished defragmenting etcd member[127.0.0.1:2379]
釋放數(shù)據(jù)庫空間
四、網(wǎng)絡(luò)延遲
如果有大量并發(fā)客戶端請求etcd leader服務(wù),則可能由于網(wǎng)絡(luò)擁塞而延遲處理follower對等請求。在follower節(jié)點(diǎn)上的發(fā)送緩沖區(qū)錯(cuò)誤消息:

dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full
可以通過在客戶端提高etcd對等網(wǎng)絡(luò)流量優(yōu)先級來解決這些錯(cuò)誤。在Linux上,可以使用流量控制機(jī)制對對等流量進(jìn)行優(yōu)先級排序:

tc qdisc add dev eth0 root handle 1: prio bands 3
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport 2739 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport 2739 0xffff flowid 1:1
根據(jù)實(shí)際情況修改接口名稱。

3 - Docker調(diào)優(yōu)
Docker鏡像下載最大并發(fā)數(shù)

通過配置鏡像上傳\下載并發(fā)數(shù)max-concurrent-downloads,max-concurrent-uploads,縮短鏡像上傳\下載的時(shí)間。

配置鏡像加速地址

通過配置鏡像加速地址registry-mirrors,可以很大程度提高鏡像下載速度。

配置Docker存儲(chǔ)驅(qū)動(dòng)

OverlayFS是一個(gè)新一代的聯(lián)合文件系統(tǒng),類似于AUFS,但速度更快,實(shí)現(xiàn)更簡單。Docker為OverlayFS提供了兩個(gè)存儲(chǔ)驅(qū)動(dòng)程序:舊版的overlay,新版的overlay2(更穩(wěn)定)。

配置日志文件大小

容器中會(huì)產(chǎn)生大量日志文件,很容器占滿磁盤空間。通過設(shè)置日志文件大小,可以有效控制日志文件對磁盤的占用量。例如:

image-20180910172158993

開啟WARNING: No swap limit support,WARNING: No memory limit support支持

對于Ubuntu\Debian系統(tǒng),執(zhí)行docker info命令時(shí)能看到警告WARNING: No swap limit support或者WARNING: No memory limit support。因?yàn)閁buntu\Debian系統(tǒng)默認(rèn)關(guān)閉了swap account或者功能,這樣會(huì)導(dǎo)致設(shè)置容器內(nèi)存或者swap資源限制不生效,解決方法。

(可選)修改Docker默認(rèn)IP地址

Docker第一次運(yùn)行時(shí)會(huì)自動(dòng)創(chuàng)建名為docker0的網(wǎng)絡(luò)接口,默認(rèn)接口地址為172.17.0.1/16。在一些企業(yè)中,可能已經(jīng)使用了這個(gè)網(wǎng)段的地址,或者規(guī)劃以后會(huì)使用這個(gè)網(wǎng)段的地址。所以,建議在安裝好docker服務(wù)后,第一時(shí)間修改docker0接口地址,避免后期出現(xiàn)網(wǎng)段沖突。

停止docker運(yùn)行
systemctl stop docker.service

刪除已有的docker0接口
sudo ip link del docker0

修改docker配置文件
在/etc/docker/daemon.json中添加"bip": "169.254.123.1/24",

綜合配置

touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<EOF
{
? ? "oom-score-adjust": -1000,
? ? "log-driver": "json-file",
? ? "log-opts": {
? ? "max-size": "100m",
? ? "max-file": "3"
? ? },
? ? "max-concurrent-downloads": 10,
? ? "max-concurrent-uploads": 10,
? ? "bip": "169.254.123.1/24",
? ? "registry-mirrors": ["https://3aexnae3.mirror.aliyuncs.com"],
? ? "storage-driver": "overlay2",
? ? "storage-opts": [
? ? "overlay2.override_kernel_check=true"
? ? ]
}
EOF

systemctl daemon-reload && systemctl restart docker
docker.service配置

對于CentOS系統(tǒng),docker.service默認(rèn)位于/usr/lib/systemd/system/docker.service;對于Ubuntu系統(tǒng),docker.service默認(rèn)位于/lib/systemd/system/docker.service。編輯docker.service,添加以下參數(shù)。

防止docker服務(wù)OOM: OOMScoreAdjust=-1000

開啟iptables轉(zhuǎn)發(fā)鏈: ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT (centos) image-20190615165436722 ExecStartPost=/sbin/iptables -P FORWARD ACCEPT (ubuntu)

image-20190615170819489


4 - kubernetes調(diào)優(yōu)
完整的配置文件可查看 RKE示例配置。

kube-apiserver
RKE或者Rancher UI自定義部署集群的時(shí)候,在yaml文件中指定以下參數(shù)

services:
? kube-api:
? ? extra_args:
? ? ? watch-cache: true
? ? ? default-watch-cache-size: 1500
? ? ? # 事件保留時(shí)間,默認(rèn)1小時(shí)
? ? ? event-ttl: 1h0m0s
? ? ? # 默認(rèn)值400,設(shè)置0為不限制,一般來說,每25~30個(gè)Pod有15個(gè)并行
? ? ? max-requests-inflight: 800
? ? ? # 默認(rèn)值200,設(shè)置0為不限制
? ? ? max-mutating-requests-inflight: 400
? ? ? # kubelet操作超時(shí),默認(rèn)5s
? ? ? kubelet-timeout: 5s
kube-controller
RKE或者Rancher UI自定義部署集群的時(shí)候,在yaml文件中指定以下參數(shù)

services:
? kube-controller:
? ? extra_args:
? ? ? # 修改每個(gè)節(jié)點(diǎn)子網(wǎng)大小(cidr掩碼長度),默認(rèn)為24,可用IP為254個(gè);23,可用IP為510個(gè);22,可用IP為1022個(gè);
? ? ? node-cidr-mask-size: '24'

? ? ? feature-gates: "TaintBasedEvictions=false"
? ? ? # 控制器定時(shí)與節(jié)點(diǎn)通信以檢查通信是否正常,周期默認(rèn)5s
? ? ? node-monitor-period: '5s'
? ? ? ## 當(dāng)節(jié)點(diǎn)通信失敗后,再等一段時(shí)間kubernetes判定節(jié)點(diǎn)為notready狀態(tài)。
? ? ? ## 這個(gè)時(shí)間段必須是kubelet的nodeStatusUpdateFrequency(默認(rèn)10s)的整數(shù)倍,
? ? ? ## 其中N表示允許kubelet同步節(jié)點(diǎn)狀態(tài)的重試次數(shù),默認(rèn)40s。
? ? ? node-monitor-grace-period: '20s'
? ? ? ## 再持續(xù)通信失敗一段時(shí)間后,kubernetes判定節(jié)點(diǎn)為unhealthy狀態(tài),默認(rèn)1m0s。
? ? ? node-startup-grace-period: '30s'
? ? ? ## 再持續(xù)失聯(lián)一段時(shí)間,kubernetes開始遷移失聯(lián)節(jié)點(diǎn)的Pod,默認(rèn)5m0s。
? ? ? pod-eviction-timeout: '1m'

? ? ? # 默認(rèn)5. 同時(shí)同步的deployment的數(shù)量。
? ? ? concurrent-deployment-syncs: 5
? ? ? # 默認(rèn)5. 同時(shí)同步的endpoint的數(shù)量。
? ? ? concurrent-endpoint-syncs: 5
? ? ? # 默認(rèn)20. 同時(shí)同步的垃圾收集器工作器的數(shù)量。
? ? ? concurrent-gc-syncs: 20
? ? ? # 默認(rèn)10. 同時(shí)同步的命名空間的數(shù)量。
? ? ? concurrent-namespace-syncs: 10
? ? ? # 默認(rèn)5. 同時(shí)同步的副本集的數(shù)量。
? ? ? concurrent-replicaset-syncs: 5
? ? ? # 默認(rèn)5m0s. 同時(shí)同步的資源配額數(shù)。
? ? ? concurrent-resource-quota-syncs: 5m0s
? ? ? # 默認(rèn)1. 同時(shí)同步的服務(wù)數(shù)。
? ? ? concurrent-service-syncs: 1
? ? ? # 默認(rèn)5. 同時(shí)同步的服務(wù)帳戶令牌數(shù)。
? ? ? concurrent-serviceaccount-token-syncs: 5
? ? ? # 默認(rèn)5. 同時(shí)同步的復(fù)制控制器的數(shù)量
? ? ? concurrent-rc-syncs: 5
? ? ? # 默認(rèn)30s. 同步deployment的周期。
? ? ? deployment-controller-sync-period: 30s
? ? ? # 默認(rèn)15s。同步PV和PVC的周期。
? ? ? pvclaimbinder-sync-period: 15s

? ? ? # 默認(rèn)30. 與apiserver通信并發(fā)數(shù)。
? ? ? kube-api-burst: 60
? ? ? # 默認(rèn)20. 與kubernetes apiserver交談時(shí)使用的QPS,QPS = 并發(fā)量 / 平均響應(yīng)時(shí)間
? ? ? kube-api-qps: 40
kubelet
RKE或者Rancher UI自定義部署集群的時(shí)候,在yaml文件中指定以下參數(shù)

services:
? kubelet:
? ? extra_args:
? ? ? feature-gates: "TaintBasedEvictions=false"
? ? ? # 指定pause鏡像
? ? ? pod-infra-container-image: 'rancher/pause:3.1'
? ? ? # 傳遞給網(wǎng)絡(luò)插件的MTU值,以覆蓋默認(rèn)值,設(shè)置為0(零)則使用默認(rèn)的1460
? ? ? network-plugin-mtu: '1500'
? ? ? # 修改節(jié)點(diǎn)最大Pod數(shù)量
? ? ? max-pods: "250"
? ? ? # 密文和配置映射同步時(shí)間,默認(rèn)1分鐘
? ? ? sync-frequency: '3s'
? ? ? # Kubelet進(jìn)程可以打開的文件數(shù)(默認(rèn)1000000),根據(jù)節(jié)點(diǎn)配置情況調(diào)整
? ? ? max-open-files: '2000000'
? ? ? # 與apiserver會(huì)話時(shí)的并發(fā)數(shù),默認(rèn)是10
? ? ? kube-api-burst: '30'
? ? ? # 與apiserver會(huì)話時(shí)的 QPS,默認(rèn)是5,QPS = 并發(fā)量/平均響應(yīng)時(shí)間
? ? ? kube-api-qps: '15'
? ? ? # kubelet默認(rèn)一次拉取一個(gè)鏡像,設(shè)置為false可以同時(shí)拉取多個(gè)鏡像,
? ? ? # 前提是存儲(chǔ)驅(qū)動(dòng)要為overlay2,對應(yīng)的Dokcer也需要增加下載并發(fā)數(shù),參考[docker配置](https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/best-practices/docker/)
? ? ? serialize-image-pulls: 'false'
? ? ? # 拉取鏡像的最大并發(fā)數(shù),registry-burst不能超過registry-qps。
? ? ? # 僅當(dāng)registry-qps大于0(零)時(shí)生效,(默認(rèn)10)。如果registry-qps為0則不限制(默認(rèn)5)。
? ? ? registry-burst: '10'
? ? ? registry-qps: '0'
? ? ? cgroups-per-qos: 'true'
? ? ? cgroup-driver: 'cgroupfs'

? ? ? # 節(jié)點(diǎn)資源預(yù)留
? ? ? enforce-node-allocatable: 'pods'
? ? ? system-reserved: 'cpu=0.25,memory=200Mi'
? ? ? kube-reserved: 'cpu=0.25,memory=1500Mi'

? ? ? # POD驅(qū)逐,這個(gè)參數(shù)只支持內(nèi)存和磁盤。
? ? ? ## 硬驅(qū)逐伐值
? ? ? ### 當(dāng)節(jié)點(diǎn)上的可用資源降至保留值以下時(shí),就會(huì)觸發(fā)強(qiáng)制驅(qū)逐。強(qiáng)制驅(qū)逐會(huì)強(qiáng)制kill掉POD,不會(huì)等POD自動(dòng)退出。
? ? ? eviction-hard: 'memory.available<300Mi,nodefs.available<10%,imagefs.available<15%,nodefs.inodesFree<5%'
? ? ? ## 軟驅(qū)逐伐值
? ? ? ### 以下四個(gè)參數(shù)配套使用,當(dāng)節(jié)點(diǎn)上的可用資源少于這個(gè)值時(shí)但大于硬驅(qū)逐伐值時(shí)候,會(huì)等待eviction-soft-grace-period設(shè)置的時(shí)長;
? ? ? ### 等待中每10s檢查一次,當(dāng)最后一次檢查還觸發(fā)了軟驅(qū)逐伐值就會(huì)開始驅(qū)逐,驅(qū)逐不會(huì)直接Kill POD,先發(fā)送停止信號給POD,然后等待eviction-max-pod-grace-period設(shè)置的時(shí)長;
? ? ? ### 在eviction-max-pod-grace-period時(shí)長之后,如果POD還未退出則發(fā)送強(qiáng)制kill POD"
? ? ? eviction-soft: 'memory.available<500Mi,nodefs.available<50%,imagefs.available<50%,nodefs.inodesFree<10%'
? ? ? eviction-soft-grace-period: 'memory.available=1m30s'
? ? ? eviction-max-pod-grace-period: '30'
? ? ? eviction-pressure-transition-period: '30s'
? ? ? # 指定kubelet多長時(shí)間向master發(fā)布一次節(jié)點(diǎn)狀態(tài)。注意: 它必須與kube-controller中的nodeMonitorGracePeriod一起協(xié)調(diào)工作。(默認(rèn) 10s)
? ? ? node-status-update-frequency: 10s
? ? ? # 設(shè)置cAdvisor全局的采集行為的時(shí)間間隔,主要通過內(nèi)核事件來發(fā)現(xiàn)新容器的產(chǎn)生。默認(rèn)1m0s
? ? ? global-housekeeping-interval: 1m0s
? ? ? # 每個(gè)已發(fā)現(xiàn)的容器的數(shù)據(jù)采集頻率。默認(rèn)10s
? ? ? housekeeping-interval: 10s
? ? ? # 所有運(yùn)行時(shí)請求的超時(shí),除了長時(shí)間運(yùn)行的 pull, logs, exec and attach。超時(shí)后,kubelet將取消請求,拋出錯(cuò)誤,然后重試。(默認(rèn)2m0s)
? ? ? runtime-request-timeout: 2m0s
? ? ? # 指定kubelet計(jì)算和緩存所有pod和卷的卷磁盤使用量的間隔。默認(rèn)為1m0s
? ? ? volume-stats-agg-period: 1m0s

? ? # 可以選擇定義額外的卷綁定到服務(wù)
? ? extra_binds:
? ? ? - "/usr/libexec/kubernetes/kubelet-plugins:/usr/libexec/kubernetes/kubelet-plugins"
? ? ? - "/etc/iscsi:/etc/iscsi"
? ? ? - "/sbin/iscsiadm:/sbin/iscsiadm"
kube-proxy
services:
? kubeproxy:
? ? extra_args:
? ? ? # 默認(rèn)使用iptables進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),如果要啟用ipvs,則此處設(shè)置為`ipvs`
? ? ? proxy-mode: ""
? ? ? # 與kubernetes apiserver通信并發(fā)數(shù),默認(rèn)10;
? ? ? kube-api-burst: 20
? ? ? # 與kubernetes apiserver通信時(shí)使用QPS,默認(rèn)值5,QPS = 并發(fā)量 / 平均響應(yīng)時(shí)間
? ? ? kube-api-qps: 10
? ? extra_binds:
? ? ? - "/lib/modules:/lib/modules"
kube-scheduler
services:
? scheduler:
? ? extra_args:
? ? ? kube-api-burst:
? ? extra_binds: []
? ? extra_env: []


docker run -d --name rancher --restart=unless-stopped \
-p 1080:80 -p 1443:443 \
-v /var/lib/rahcher:/var/lib/rancher/ \
-v /var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable --no-cacerts

sudo docker run -d --name rancher-agent --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.9 --server https://172.16.1.90 --token 7xxw2fx7trpnkdhkq8zbfvkhsw9smv6d2tsbk4mt76l6vkfjkvcdhm --etcd --controlplane --worker

sudo docker login --username=thinkmaps registry.cn-hangzhou.aliyuncs.com

xxxxxx

=========================================================================
###最小cluster.yml示例
####當(dāng)前RKE版本v0.3.1

nodes:
- address: 172.16.1.91
? user: thinkmap
? role:
? - controlplane
? - worker
? - etcd
- address: 172.16.1.92
? user: thinkmap
? role:
? - controlplane
? - worker
? - etcd
- address: 172.16.1.93
? user: thinkmap
? role:
? - controlplane
? - worker
? - etcd


###完整 cluster.yml 示例
####當(dāng)前RKE版本v0.3.1

# If you intened to deploy Kubernetes in an air-gapped environment,
# please consult the documentation on how to configure custom RKE images.
nodes:
- address: 172.16.1.91
? port: "22"
? internal_address: ""
? role:
? - controlplane
? - worker
? - etcd
? hostname_override: node01.thinkmap.ai
? user: thinkmap
? docker_socket: /var/run/docker.sock
? ssh_key: ""
? ssh_key_path: /home/thinkmap/.ssh/id_rsa
? ssh_cert: ""
? ssh_cert_path: ""
? labels: {}
? taints: []
- address: 172.16.1.92
? port: "22"
? internal_address: ""
? role:
? - controlplane
? - worker
? - etcd
? hostname_override: node02.thinkmap.ai
? user: thinkmap
? docker_socket: /var/run/docker.sock
? ssh_key: ""
? ssh_key_path: /home/thinkmap/.ssh/id_rsa
? ssh_cert: ""
? ssh_cert_path: ""
? labels: {}
? taints: []
- address: 172.16.1.93
? port: "22"
? internal_address: ""
? role:
? - controlplane
? - worker
? - etcd
? hostname_override: node03.thinkmap.ai
? user: thinkmap
? docker_socket: /var/run/docker.sock
? ssh_key: ""
? ssh_key_path: /home/thinkmap/.ssh/id_rsa
? ssh_cert: ""
? ssh_cert_path: ""
? labels: {}
? taints: []?
services:
? etcd:
? ? image: ""
? ? extra_binds: []
? ? extra_env: []
? ? external_urls: []
? ? ca_cert: ""
? ? cert: ""
? ? key: ""
? ? path: ""
? ? uid: 0
? ? gid: 0
? ? snapshot: true
? ? retention: "24h"
? ? creation: "5m0s"
? ? # 開啟自動(dòng)備份
? ? ## rke版本大于等于0.2.x或rancher版本大于等于2.2.0時(shí)使用
? ? backup_config:
? ? ? enabled: true
? ? ? interval_hours: 12
? ? ? retention: 6
? ? # 擴(kuò)展參數(shù)
? ? extra_args:
? ? ? auto-compaction-retention: 240 #(單位小時(shí))
? ? ? # 修改空間配額為$((6*1024*1024*1024)),默認(rèn)2G,最大8G
? ? ? quota-backend-bytes: '6442450944'
? ? ??
? kube-api:
? ? image: ""
? ? extra_binds: []
? ? extra_env: []
? ? service_cluster_ip_range: 10.43.0.0/16
? ? service_node_port_range: "30000-32767"
? ? pod_security_policy: false
? ? always_pull_images: false
? ? ## 這些參數(shù)將會(huì)替換默認(rèn)值
? ? extra_args:
? ? ? watch-cache: true
? ? ? default-watch-cache-size: 1500
? ? ? # 默認(rèn)值400,設(shè)置0為不限制,一般來說,每25~30個(gè)Pod有15個(gè)并行
? ? ? max-requests-inflight: 800
? ? ? # 默認(rèn)值200,設(shè)置0為不限制
? ? ? max-mutating-requests-inflight: 400
? ? ? # kubelet操作超時(shí),默認(rèn)5s
? ? ? kubelet-timeout: 5s
? ? ? # 啟用審計(jì)日志到標(biāo)準(zhǔn)輸出
? ? ? audit-log-path: "-"
? ? ? # 增加刪除workers的數(shù)量
? ? ? #delete-collection-workers: 3
? ? ? # 將日志輸出的級別設(shè)置為debug模式
? ? ? #v: 4
? kube-controller:
? ? image: ""
? ? extra_binds: []
? ? extra_env: []
? ? cluster_cidr: 10.42.0.0/16
? ? service_cluster_ip_range: 10.43.0.0/16
? ? extra_args:
? ? ? # 修改每個(gè)節(jié)點(diǎn)子網(wǎng)大小(cidr掩碼長度),默認(rèn)為24,可用IP為254個(gè);23,可用IP為510個(gè);22,可用IP為1022個(gè);
? ? ? node-cidr-mask-size: '24'
? ? ? feature-gates: "TaintBasedEvictions=false"
? ? ? # 控制器定時(shí)與節(jié)點(diǎn)通信以檢查通信是否正常,周期默認(rèn)5s
? ? ? node-monitor-period: '5s'
? ? ? ## 當(dāng)節(jié)點(diǎn)通信失敗后,再等一段時(shí)間kubernetes判定節(jié)點(diǎn)為notready狀態(tài)。
? ? ? ## 這個(gè)時(shí)間段必須是kubelet的nodeStatusUpdateFrequency(默認(rèn)10s)的整數(shù)倍,
? ? ? ## 其中N表示允許kubelet同步節(jié)點(diǎn)狀態(tài)的重試次數(shù),默認(rèn)40s。
? ? ? node-monitor-grace-period: '20s'
? ? ? ## 再持續(xù)通信失敗一段時(shí)間后,kubernetes判定節(jié)點(diǎn)為unhealthy狀態(tài),默認(rèn)1m0s。
? ? ? node-startup-grace-period: '30s'
? ? ? ## 再持續(xù)失聯(lián)一段時(shí)間,kubernetes開始遷移失聯(lián)節(jié)點(diǎn)的Pod,默認(rèn)5m0s。
? ? ? pod-eviction-timeout: '1m'
? ? ? # 默認(rèn)5. 同時(shí)同步的deployment的數(shù)量。
? ? ? concurrent-deployment-syncs: 5
? ? ? # 默認(rèn)5. 同時(shí)同步的endpoint的數(shù)量。
? ? ? concurrent-endpoint-syncs: 5
? ? ? # 默認(rèn)20. 同時(shí)同步的垃圾收集器工作器的數(shù)量。
? ? ? concurrent-gc-syncs: 20
? ? ? # 默認(rèn)10. 同時(shí)同步的命名空間的數(shù)量。
? ? ? concurrent-namespace-syncs: 10
? ? ? # 默認(rèn)5. 同時(shí)同步的副本集的數(shù)量。
? ? ? concurrent-replicaset-syncs: 5
? ? ? # 默認(rèn)1. 同時(shí)同步的服務(wù)數(shù)。
? ? ? concurrent-service-syncs: 1
? ? ? # 默認(rèn)5. 同時(shí)同步的服務(wù)帳戶令牌數(shù)。
? ? ? concurrent-serviceaccount-token-syncs: 5
? ? ? # 默認(rèn)30s. 同步deployment的周期。
? ? ? deployment-controller-sync-period: 30s
? ? ? # 默認(rèn)15s。同步PV和PVC的周期。
? ? ? pvclaimbinder-sync-period: 15s
? ? ? # 默認(rèn)30. 與apiserver通信并發(fā)數(shù)。
? ? ? kube-api-burst: 60
? ? ? # 默認(rèn)20. 與kubernetes apiserver交談時(shí)使用的QPS,QPS = 并發(fā)量 / 平均響應(yīng)時(shí)間
? ? ? kube-api-qps: 40
? scheduler:
? ? image: ""
? ? extra_args: {}
? ? extra_binds: []
? ? extra_env: []
? kubelet:
? ? image: ""
? ? extra_env: []
? ? cluster_domain: cluster.local
? ? infra_container_image: ""
? ? cluster_dns_server: 10.43.0.10
? ? fail_swap_on: false
? ? # 擴(kuò)展變量
? ? extra_args:
? ? ? feature-gates: "TaintBasedEvictions=false"
? ? ? # 指定pause鏡像
? ? ? pod-infra-container-image: 'rancher/pause:3.1'
? ? ? # 傳遞給網(wǎng)絡(luò)插件的MTU值,以覆蓋默認(rèn)值,設(shè)置為0(零)則使用默認(rèn)的1460
? ? ? network-plugin-mtu: '1500'
? ? ? # 修改節(jié)點(diǎn)最大Pod數(shù)量
? ? ? max-pods: "250"
? ? ? # 密文和配置映射同步時(shí)間,默認(rèn)1分鐘
? ? ? sync-frequency: '3s'
? ? ? # Kubelet進(jìn)程可以打開的文件數(shù)(默認(rèn)1000000),根據(jù)節(jié)點(diǎn)配置情況調(diào)整
? ? ? max-open-files: '2000000'
? ? ? # 與apiserver會(huì)話時(shí)的并發(fā)數(shù),默認(rèn)是10
? ? ? kube-api-burst: '30'
? ? ? # 與apiserver會(huì)話時(shí)的 QPS,默認(rèn)是5,QPS = 并發(fā)量/平均響應(yīng)時(shí)間
? ? ? kube-api-qps: '15'
? ? ? # kubelet默認(rèn)一次拉取一個(gè)鏡像,設(shè)置為false可以同時(shí)拉取多個(gè)鏡像,
? ? ? # 前提是存儲(chǔ)驅(qū)動(dòng)要為overlay2,對應(yīng)的Dokcer也需要增加下載并發(fā)數(shù),參考[docker配置](https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/best-practices/docker/)
? ? ? serialize-image-pulls: 'false'
? ? ? # 拉取鏡像的最大并發(fā)數(shù),registry-burst不能超過registry-qps ,
? ? ? # 僅當(dāng)registry-qps大于0(零)時(shí)生效,(默認(rèn)10)。如果registry-qps為0則不限制(默認(rèn)5)。
? ? ? registry-burst: '10'
? ? ? registry-qps: '0'
? ? ? cgroups-per-qos: 'true'
? ? ? cgroup-driver: 'cgroupfs'

? ? ? # 節(jié)點(diǎn)資源預(yù)留
? ? ? enforce-node-allocatable: pods
? ? ? system-reserved: 'cpu=0.25,memory=500Mi,ephemeral-storage=1Gi'
? ? ? system-reserved-cgroup: /system.slice
? ? ? kube-reserved: 'cpu=0.25,memory=2Gi,ephemeral-storage=1Gi'
? ? ? kube-reserved-cgroup: /runtime.service
? ? ? # POD驅(qū)逐,這個(gè)參數(shù)只支持內(nèi)存和磁盤。
? ? ? ## 硬驅(qū)逐伐值
? ? ? ### 當(dāng)節(jié)點(diǎn)上的可用資源降至保留值以下時(shí),就會(huì)觸發(fā)強(qiáng)制驅(qū)逐。強(qiáng)制驅(qū)逐會(huì)強(qiáng)制kill掉POD,不會(huì)等POD自動(dòng)退出。
? ? ? eviction-hard: "memory.available<500Mi,nodefs.available<1Gi,imagefs.available<10Gi"
? ? ? eviction-minimum-reclaim: "memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi"
? ? ? ## 軟驅(qū)逐伐值
? ? ? ### 以下四個(gè)參數(shù)配套使用,當(dāng)節(jié)點(diǎn)上的可用資源少于這個(gè)值時(shí)但大于硬驅(qū)逐伐值時(shí)候,會(huì)等待eviction-soft-grace-period設(shè)置的時(shí)長;
? ? ? ### 等待中每10s檢查一次,當(dāng)最后一次檢查還觸發(fā)了軟驅(qū)逐伐值就會(huì)開始驅(qū)逐,驅(qū)逐不會(huì)直接Kill POD,先發(fā)送停止信號給POD,然后等待eviction-max-pod-grace-period設(shè)置的時(shí)長;
? ? ? ### 在eviction-max-pod-grace-period時(shí)長之后,如果POD還未退出則發(fā)送強(qiáng)制kill POD"
? ? ? #eviction-soft: 'memory.available<4Gi,nodefs.available<50%,imagefs.available<50%,nodefs.inodesFree<10%'
? ? ? #eviction-soft-grace-period: 'memory.available=1m30s'
? ? ? #eviction-max-pod-grace-period: '30'
? ? ? #eviction-pressure-transition-period: '30s'
? ? ? # 指定kubelet多長時(shí)間向master發(fā)布一次節(jié)點(diǎn)狀態(tài)。注意: 它必須與kube-controller中的nodeMonitorGracePeriod一起協(xié)調(diào)工作。(默認(rèn) 10s)
? ? ? node-status-update-frequency: 10s
? ? ? # 設(shè)置cAdvisor全局的采集行為的時(shí)間間隔,主要通過內(nèi)核事件來發(fā)現(xiàn)新容器的產(chǎn)生。默認(rèn)1m0s
? ? ? global-housekeeping-interval: 1m0s
? ? ? # 每個(gè)已發(fā)現(xiàn)的容器的數(shù)據(jù)采集頻率。默認(rèn)10s
? ? ? housekeeping-interval: 10s
? ? ? # 所有運(yùn)行時(shí)請求的超時(shí),除了長時(shí)間運(yùn)行的 pull, logs, exec and attach。超時(shí)后,kubelet將取消請求,拋出錯(cuò)誤,然后重試。(默認(rèn)2m0s)
? ? ? runtime-request-timeout: 2m0s
? ? ? # 指定kubelet計(jì)算和緩存所有pod和卷的卷磁盤使用量的間隔。默認(rèn)為1m0s
? ? ? volume-stats-agg-period: 1m0s

? ? ? #volume-plugin-dir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec
? ? # 可以選擇定義額外的卷綁定到服務(wù)
? ? extra_binds:
? ? ? - "/usr/libexec/kubernetes/kubelet-plugins:/usr/libexec/kubernetes/kubelet-plugins"
? kubeproxy:
? ? image: ""
? ? extra_env: []
? ? extra_args:
? ? ? # 默認(rèn)使用iptables進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),如果要啟用ipvs,則此處設(shè)置為`ipvs`
? ? ? proxy-mode: ""
? ? ? # 與kubernetes apiserver通信并發(fā)數(shù),默認(rèn)10;
? ? ? kube-api-burst: 20
? ? ? # 與kubernetes apiserver通信時(shí)使用QPS,默認(rèn)值5,QPS = 并發(fā)量/平均響應(yīng)時(shí)間
? ? ? kube-api-qps: 10
? ? extra_binds:
? ? ? - "/lib/modules:/lib/modules"
network:
? plugin: flannel
? options: {}
? node_selector: {}
authentication:
? strategy: x509
? sans:
? ? # 此處配置備用域名或IP,當(dāng)主域名或者IP無法訪問時(shí),可通過備用域名或IP訪問
? ? - "172.16.1.90"
? ? - "rke.thinkmap.ai"
? webhook: null

system_images:
? etcd: "rancher/coreos-etcd:v3.3.10-rancher1"
? alpine: "rancher/rke-tools:v0.1.50"
? nginx_proxy: "rancher/rke-tools:v0.1.50"
? cert_downloader: "rancher/rke-tools:v0.1.50"
? kubernetes_services_sidecar: "rancher/rke-tools:v0.1.50"
? kubedns: "rancher/k8s-dns-kube-dns:1.15.0"
? dnsmasq: "rancher/k8s-dns-dnsmasq-nanny:1.15.0"
? kubedns_sidecar: "rancher/k8s-dns-sidecar:1.15.0"
? kubedns_autoscaler: "rancher/cluster-proportional-autoscaler:1.3.0"
? coredns: "rancher/coredns-coredns:1.3.1"
? coredns_autoscaler: "rancher/cluster-proportional-autoscaler:1.3.0"
? kubernetes: "rancher/hyperkube:v1.15.5-rancher1"
? flannel: "rancher/coreos-flannel:v0.11.0-rancher1"
? flannel_cni: "rancher/flannel-cni:v0.3.0-rancher5"
? calico_node: "rancher/calico-node:v3.7.4"
? calico_cni: "rancher/calico-cni:v3.7.4"
? calico_controllers: "rancher/calico-kube-controllers:v3.7.4"
? calico_ctl: "rancher/calico-ctl:v2.0.0"
? calico_flexvol: ""
? canal_node: "rancher/calico-node:v3.7.4"
? canal_cni: "rancher/calico-cni:v3.7.4"
? canal_flannel: "rancher/coreos-flannel:v0.11.0"
? canal_flexvol: ""
? weave_node: "weaveworks/weave-kube:2.5.2"
? weave_cni: "weaveworks/weave-npc:2.5.2"
? pod_infra_container: "rancher/pause:3.1"
? ingress: "rancher/nginx-ingress-controller:nginx-0.25.1-rancher1"
? ingress_backend: "rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1"
? metrics_server: "rancher/metrics-server:v0.3.3"
? windows_pod_infra_container: ""
#ssh_key_path: /home/thinkmap/.ssh/id_rsa
#ssh_cert_path: ""
#ssh_agent_auth: false
authorization:
? mode: rbac
? options: {}
# 如果設(shè)置為true,則可以使用不受支持的Docker版本
ignore_docker_version: false
# 定義kubernetes版本.
kubernetes_version: "v1.15.5-rancher1-2"
# 私有倉庫
## 如果使用內(nèi)部公開倉庫,則可以不用設(shè)置用戶名和密碼
private_registries: []
ingress:
? provider: ""
? options: {}
? node_selector: {}
? extra_args: {}
? dns_policy: ""
cluster_name: "rke-cluster"
cloud_provider:
? name: ""
prefix_path: ""
addon_job_timeout: 30
bastion_host:
? address: ""
? port: ""
? user: ""
? ssh_key: ""
? ssh_key_path: ""
? ssh_cert: ""
? ssh_cert_path: ""
monitoring:
? provider: ""
? options: {}
? node_selector: {}
restore:
? restore: false
? snapshot_name: ""
dns:
? provider: coredns
? upstreamnameservers:
? - 114.114.114.114
? - 1.2.4.8
? node_selector:
? ? app: dns
addons: ""
addons_include: []


###rke部署k8s
[thinkmap@rke ~]$ ./rke up --config cluster.yml


###錯(cuò)誤總結(jié)
####安裝過程報(bào)如下錯(cuò)誤:
FATA[0122] Failed to get job complete status for job rke-network-plugin-deploy-job in namespace kube-system?

在rke服務(wù)器上安裝kubectl解決
[thinkmap@rke ~]$ sudo yum install -y ?kubectl

kubectl --kubeconfig kube_config_cluster.yml logs -l job-name=rke-user-addon-deploy-job -n kube-system


###環(huán)境信息殘留清理

目前部署中,大部分問題都是因?yàn)橛捎诓渴瓠h(huán)境的操作系統(tǒng),或多次部署,升級后殘留的的信息造成的。
部署前或部署時(shí),請使用以下命令將環(huán)境的各類信息清理干凈:
[root@node01 ~]# vim delk8s.sh?
#/bin/sh
docker ps -a|awk '{print $1}'|xargs docker stop
docker ps -a|awk '{print $1}'|xargs docker rm -f
docker volume ls|awk '{print $2}'|xargs docker volume rm
sudo df -h|grep kubelet |awk -F % '{print $2}'|xargs umount
sudo rm /var/lib/kubelet/* -rf
sudo rm /etc/kubernetes/* -rf
sudo rm /var/lib/rancher/* -rf
sudo rm /var/lib/etcd/* -rf
sudo rm /var/lib/cni/* -rf
sudo iptables -F && sudo iptables -t nat -F
sudo ip link del flannel.1

### 安裝配置nginx?

#復(fù)制下面的代碼到文本編輯器,保存為nginx.conf。
worker_processes 4;
worker_rlimit_nofile 40000;

events {
? ? worker_connections 8192;
}

http {
? ? server {
? ? ? ? listen ? ? ? ? 80;
? ? ? ? return 301 https://$host$request_uri;
? ? }
}

stream {
? ? upstream rancher_servers {
? ? ? ? least_conn;
? ? ? ? server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
? ? ? ? server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
? ? ? ? server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
? ? }
? ? server {
? ? ? ? listen ? ? 443;
? ? ? ? proxy_pass rancher_servers;
? ? }
}


啟動(dòng)nginx?

docker run -d --restart=unless-stopped \
? -p 80:80 -p 443:443 \
? -v /etc/nginx.conf:/etc/nginx/nginx.conf \
? nginx:1.14


*這里的IP_NODE_1、IP_NODE_2、IP_NODE_3替換成真實(shí)環(huán)境中的Rancher節(jié)點(diǎn)的IP地址。*


測試集群
安裝完成后,會(huì)產(chǎn)生一個(gè)kube_config_rancher-cluster.yml文件,這個(gè)是集群的認(rèn)證文件。
mkdir ~/.kube

rm -rf ~/.kube/config

cat kube_config_cluster.yml ?>> ~/.kube/config

PS: 保存好這個(gè)文件,日后升級能用到。

scp -r .kube 172.16.1.91:/home/thinkmap/
scp -r .kube 172.16.1.92:/home/thinkmap/
scp -r .kube 172.16.1.93:/home/thinkmap/
scp -r .kube 172.16.1.94:/home/thinkmap/
scp -r .kube 172.16.1.95:/home/thinkmap/

### 安裝 kubectl?

通過kubectl 測試連接集群,查看所有節(jié)點(diǎn)狀態(tài)

?? ?```
?? ?kubectl get nodes
?? ?```

### 檢查集群?

- Pods的STATUS是Completed為run-one Jobs,這些pods READY應(yīng)該為0/1。

```
kubectl get pods --all-namespaces

NAMESPACE ? ? ? NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? ? STATUS ? ? ?RESTARTS ? AGE
ingress-nginx ? nginx-ingress-controller-tnsn4 ? ? ? ? ? ?1/1 ? ? ? Running ? ? 0 ? ? ? ? ?30s
ingress-nginx ? nginx-ingress-controller-tw2ht ? ? ? ? ? ?1/1 ? ? ? Running ? ? 0 ? ? ? ? ?30s
ingress-nginx ? nginx-ingress-controller-v874b ? ? ? ? ? ?1/1 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? canal-jp4hz ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3/3 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? canal-z2hg8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3/3 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? canal-z6kpw ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3/3 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? kube-dns-7588d5b5f5-sf4vh ? ? ? ? ? ? ? ? 3/3 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? kube-dns-autoscaler-5db9bbb766-jz2k6 ? ? ?1/1 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? metrics-server-97bc649d5-4rl2q ? ? ? ? ? ?1/1 ? ? ? Running ? ? 0 ? ? ? ? ?30s
kube-system ? ? rke-ingress-controller-deploy-job-bhzgm ? 0/1 ? ? ? Completed ? 0 ? ? ? ? ?30s
kube-system ? ? rke-kubedns-addon-deploy-job-gl7t4 ? ? ? ?0/1 ? ? ? Completed ? 0 ? ? ? ? ?30s
kube-system ? ? rke-metrics-addon-deploy-job-7ljkc ? ? ? ?0/1 ? ? ? Completed ? 0 ? ? ? ? ?30s
kube-system ? ? rke-network-plugin-deploy-job-6pbgj ? ? ? 0/1 ? ? ? Completed ? 0 ? ? ? ? ?30s
```


## ?Helm ?安裝rancher dashboard


### 創(chuàng)建Helm 的 RBAC

```
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

```

### 安裝Helm
- 二進(jìn)制安裝
wget https://get.helm.sh/helm-v2.15.1-linux-amd64.tar.gz
```
tar -xvf ?helm-v2.15.1-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm


#添加鏡像源
helm init
?or?
helm init --client-only

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

查看當(dāng)前的倉庫地址
helm repo list

NAME ? ? ? ? ??? ?URL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
stable ? ? ? ??? ?https://kubernetes-charts.storage.googleapis.com?
local ? ? ? ? ?? ?http://127.0.0.1:8879/charts ? ? ? ? ? ? ? ? ? ??
rancher-stable?? ?https://releases.rancher.com/server-charts/stable


修改為阿里云倉庫地址
helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

```

### Rancher中安裝Tiller
```
#當(dāng)前默認(rèn)使用v2.12.3版本的
helm init --service-account tiller ? --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

```
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1 ?--stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
?

### 升級Tiller(可選)
```
export TILLER_TAG=<new_tag>

kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:$TILLER_TAG
```

kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:v2.15.1
### 安裝證書管理器

```
helm install stable/cert-manager --name cert-manager --namespace kube-system
```

Error: validation failed: unable to recognize "": no matches for kind "Deployment" in version "apps/v1beta1"

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1--service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: apps/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

### 選擇SSL配置方式并安裝Rancher server

```
helm install rancher-stable/rancher \
? --name rancher \
? --namespace cattle-system \
? --set hostname=rke.thinkmap.ai
```


安裝證書管理器
1、只有Rancher自動(dòng)生成的證書和LetsEncrypt頒發(fā)的證書才需要cert-manager。如果是你自己的證書,可使用ingress.tls.source=secret參數(shù)指定證書,并跳過此步驟。

helm install stable/cert-manager \
? --name cert-manager \
? --namespace kube-system
?

Rancher自動(dòng)生成證書
默認(rèn)情況下,Rancher會(huì)自動(dòng)生成CA根證書并使用cert-manager頒發(fā)證書以訪問Rancher server界面。
唯一的要求是將hostname配置為訪問Rancher的域名地址,使用這種SSL證書配置方式需提前安裝證書管理器。

helm install rancher-stable/rancher \
? --name rancher \
? --namespace cattle-system \
? --set hostname=rke.thinkmap.ai


### 本機(jī)配置host

修改本地訪問機(jī)器Host加入
172.16.1.90 ?rke.thinkmap.ai

https://rook.io/docs/rook/v1.1/flexvolume.html

https://blog.csdn.net/hxpjava1/article/details/80175238

配置負(fù)載均衡器
在完成了集群部署后,可以通過 API server 訪問 k8s。由于環(huán)境中啟動(dòng)了多個(gè) kube-apiserver 實(shí)例以實(shí)現(xiàn)高可用,需要為這些實(shí)例架設(shè)一個(gè)負(fù)載均衡器。
這里在172.16.1.90上部署了一臺(tái) nginx 實(shí)現(xiàn)了負(fù)載均衡的功能,nginx.conf 的具體配置如下。

docker run -p 6443:80 --name nginx --restart=always -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/logs:/var/log/nginx -d nginx:stable

[root@rke nginx]# cat nginx.conf?
user ?nginx nginx;
worker_processes ?auto;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

error_log ?/var/log/nginx/error.log warn;
pid ? ? ? ?/var/run/nginx.pid;


events {
? ? use epoll;
? ? worker_connections ?10240;
}


http {
? ? include ? ? ? /etc/nginx/mime.types;
? ? default_type ?application/octet-stream;

? ? log_format ?main ?'$remote_addr - $remote_user [$time_iso8601] "$request_id" "$request" '
? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent $bytes_sent $request_length $request_time "$http_referer" '
? ? ? ? ? ? ? ? ? ? ? '"$gzip_ratio" ' '"$upstream_addr - $upstream_status $upstream_response_time" '
? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for" ';?

? ? #access_log ?logs/access.log ?main;

? ? sendfile ? ? ? ?on;
? ? #tcp_nopush ? ? on;

? ? keepalive_timeout 65;

? ? server_tokens off;

? ? #gzip on;
? ? #gzip_min_length 1k;
? ? #gzip_buffers 4 16k;
? ? #gzip_http_version 1.0;
? ? #gzip_comp_level 6;
? ? #gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
? ? #gzip_vary on;

? ? fastcgi_connect_timeout 300;
? ? fastcgi_send_timeout 300;
? ? fastcgi_read_timeout 300;
? ? fastcgi_buffer_size 64k;
? ? fastcgi_buffers 4 64k;
? ? fastcgi_busy_buffers_size 128k;
? ? fastcgi_temp_file_write_size 256k;

? ? open_file_cache max=204800 inactive=20s;
? ? open_file_cache_min_uses 1;
? ? open_file_cache_valid 30s; ? ??
??
? ? client_max_body_size 100m;
? ? client_body_buffer_size 128k;
? ? client_header_buffer_size 4k;

? ? proxy_connect_timeout 75;
? ? proxy_send_timeout 75;
? ? proxy_read_timeout 75;
? ? proxy_buffer_size 4k;
? ? proxy_buffers 4 32k;
? ? proxy_busy_buffers_size 64k;
? ? proxy_temp_file_write_size 64k;
? ? proxy_temp_path /etc/nginx/proxy_temp 1 2;

? ? #include /etc/nginx/conf.d/*.conf;
?? ? ? ?
}
stream {
? ? upstream apiserver {
? ? ? ? server 172.16.1.91:6443 weight=5 max_fails=3 fail_timeout=60s;
? ? ? ? server 172.16.1.92:6443 weight=5 max_fails=3 fail_timeout=60s;
? ? ? ? server 172.16.1.93:6443 weight=5 max_fails=3 fail_timeout=60s;
? ? }

? ? server {
? ? ? ? listen 80;
? ? ? ? proxy_connect_timeout 1s;
? ? ? ? proxy_timeout 10s;
? ? ? ? proxy_pass apiserver;
? ? }
}


docker cp nginx.conf nginx:/etc/nginx/


Images
Kubernetes Dashboard
kubernetesui/dashboard:v2.0.0-beta4
Metrics Scraper
kubernetesui/metrics-scraper:v1.0.1
Installation
Before installing the new beta, remove the previous version by deleting its namespace:

kubectl delete ns kubernetes-dashboard
Then deploy new beta:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

總結(jié)

以上是生活随笔為你收集整理的RKE方式部署Kubernetes集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。