rancher2.3.3詳細(xì)部署文檔
rancher 簡(jiǎn)介
rancher 是全椡郏化企業(yè)級(jí)容器應(yīng)用解決方案
Rancher為容器提供一攬子基礎(chǔ)架構(gòu)服務(wù):CNI兼容的網(wǎng)絡(luò)服務(wù)涕癣、存儲(chǔ)服務(wù)、主機(jī)管理谷遂、負(fù)載均衡檐迟、防護(hù)墻……
Rancher讓上述服務(wù)跨越公有云、私有云悯衬、虛擬機(jī)弹沽、物理機(jī)環(huán)境運(yùn)行,真正實(shí)現(xiàn)一鍵式應(yīng)用部署和管理筋粗。
Rancher可以與各種CI/CD工具協(xié)同工作策橘,可以實(shí)現(xiàn)開發(fā)、測(cè)試娜亿、預(yù)生產(chǎn)和生產(chǎn)環(huán)境的自動(dòng)部署丽已,提供整體可視化的主機(jī)、容器暇唾、網(wǎng)絡(luò)及存儲(chǔ)管理促脉,大幅簡(jiǎn)化運(yùn)維人員故障排除和生產(chǎn)部署的工作量。
基礎(chǔ)環(huán)境配置
主機(jī)配置
主機(jī)名配置
因?yàn)镵8S的規(guī)定策州,主機(jī)名只支持包含 - 和 .(中橫線和點(diǎn))兩種特殊符號(hào)瘸味,并且主機(jī)名不能出現(xiàn)重復(fù)。
- 1.Hosts
配置每臺(tái)主機(jī)的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中够挂。
- 2.CentOS關(guān)閉selinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 3.關(guān)閉防火墻(可選)或者放行相應(yīng)端口
對(duì)于剛剛接觸Rancher的用戶旁仿,建議在關(guān)閉防火墻的測(cè)試環(huán)境或桌面虛擬機(jī)來運(yùn)行rancher,以避免出現(xiàn)網(wǎng)絡(luò)通信問題孽糖。
1.關(guān)閉防火墻
CentOS
systemctl stop firewalld.service && systemctl disable firewalld.service
- Ubuntu
ufw disable
- 2.端口放行
端口放行請(qǐng)查看端口需求
PROTOCOL | PORT | DESCRIPTION |
---|---|---|
TCP | 22 | Node driver SSH provisioning |
TCP | 2376 | Node driver Docker daemon TLS port |
TCP | 2379 | etcd client requests |
TCP | 2380 | etcd peer communication |
UDP | 8472 | Canal/Flannel VXLAN overlay networking |
UDP | 4789 | Flannel VXLAN overlay networking on Windows cluster |
TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe |
TCP | 6783 | Weave Port |
UDP | 6783-6784 | Weave UDP Ports |
TCP | 10250 | kubelet API |
TCP | 10254 | Ingress controller livenessProbe/readinessProbe |
TCP/UDP | 30000- 32767 | NodePort port range |
-
4.配置主機(jī)時(shí)間枯冈、時(shí)區(qū)、系統(tǒng)語言
1. 查看時(shí)區(qū)
date -R或者timedatectl
2. 修改時(shí)區(qū)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3.修改系統(tǒng)語言環(huán)境
4. 配置主機(jī)NTP時(shí)間同步
5.配置主機(jī)DNS
對(duì)于類似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
systemctl daemon-reload ; systemctl restart docker
3.重啟docker服務(wù)
systemctl daemon-reload
systemctl restart docker
Kernel性能調(diào)優(yōu)
cat >> /etc/sysctl.conf<<EOF
net.ipv4.ip_forward=1
watchdog_thresh=30
net.bridge.bridge-nf-call-iptables=1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
EOF
數(shù)值根據(jù)實(shí)際環(huán)境自行配置病蛉,最后執(zhí)行sysctl -p保存配置
docker 安裝配置
Docker 安裝
- 修改數(shù)據(jù)源
Centos7.x
yum install ca-certificates ;
update-ca-trust;
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo-bak
cat << 'EOF' > /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
docker-ce 安裝
- centos
因?yàn)镃entOS的安全限制炫加,通過RKE安裝K8S集群時(shí)候無法使用root賬戶瑰煎。所以,建議CentOS用戶使用非root用戶來運(yùn)docker,不管是RKE還是custom安裝k8s,詳情查看無法為主機(jī)配置SSH隧道俗孝。
# 定義用戶名
NEW_USER=rancher
# 添加用戶(可選)
sudo adduser $NEW_USER
# 為新用戶設(shè)置密碼
sudo passwd $NEW_USER
# 為新用戶添加sudo權(quán)限
sudo echo "$NEW_USER ALL=(ALL) ALL" >> /etc/sudoers
# 卸載舊版本Docker軟件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
container*
# 定義安裝版本
export docker_version=18.06.3
# 對(duì)系統(tǒng)進(jìn)行全面的更新升級(jí)酒甸,推薦升級(jí)一下(可選)
sudo yum update -y;
# 安裝必要的一些系統(tǒng)工具
sudo yum install -y yum-utils device-mapper-persistent-data \
lvm2 bash-completion;
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# Step 3: 更新并安裝 Docker-CE
sudo yum makecache all;
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}');
sudo yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version};
# 如果已經(jīng)安裝高版本Docker,可進(jìn)行降級(jí)安裝(可選)
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version};
# 把當(dāng)前用戶加入docker組
sudo usermod -aG docker $NEW_USER;
# 設(shè)置開機(jī)啟動(dòng)
sudo systemctl enable docker;
Docker-engine
Docker-Engine Docker官方已經(jīng)不推薦使用,請(qǐng)安裝Docker-CE赋铝。
鎖定docker 版本
可能因?yàn)槟承┰驘o意間執(zhí)行了yum update或者apt-get -y upgrade;導(dǎo)致Docker版本升級(jí)插勤。為了避免此類問題發(fā)生,建議在安裝好Docker后對(duì)Docker軟件進(jìn)行鎖定革骨,防止Docker意外更新农尖。
- centos
1. 安裝yum-plugin-versionlock插件
yum install yum-plugin-versionlock
2. 鎖定軟件包
yum versionlock add docker-ce docker-ce-cli
[root@izwz969o7lu6t9lh4ta6m5z ~]# yum versionlock add docker-ce docker-ce-cli
已加載插件:fastestmirror, versionlock
Adding versionlock on: 0:docker-ce-17.06.2.ce-3.el7.centos
versionlock added: 1
[root@izwz969o7lu6t9lh4ta6m5z ~]#
3. 查看已鎖定的軟件包
yum versionlock list
4. 解鎖指定的軟件包
yum versionlock delete <軟件包名稱>
5. 解鎖所有的軟件包
yum versionlock clear
docker配置
對(duì)于通過systemd來管理服務(wù)的系統(tǒng)(比如CentOS7.X、Ubuntu16.X), Docker有兩處可以配置參數(shù): 一個(gè)是docker.service服務(wù)配置文件,一個(gè)是Docker daemon配置文件daemon.json良哲。
1.docker.service
對(duì)于CentOS系統(tǒng)卤橄,docker.service默認(rèn)位于/usr/lib/systemd/system/docker.service;對(duì)于Ubuntu系統(tǒng)臂外,docker.service默認(rèn)位于/lib/systemd/system/docker.service
2. 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來修改配置蔫浆。
3. 配置鏡像下載和上傳并發(fā)數(shù)
從Docker1.12開始殖属,支持自定義下載和上傳鏡像的并發(fā)數(shù),默認(rèn)值上傳為3個(gè)并發(fā)瓦盛,下載為5個(gè)并發(fā)洗显。通過添加"max-concurrent-downloads"和"max-concurrent-uploads"參數(shù)對(duì)其修改:
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5
4. 配置鏡像加速地址
Rancher從v1.6.15開始到v2.x.x,Rancher系統(tǒng)相關(guān)的所有鏡像(包括1.6.x上的K8S鏡像)都托管在Dockerhub倉庫。Dockerhub節(jié)點(diǎn)在國(guó)外原环,國(guó)內(nèi)直接拉取鏡像會(huì)有些緩慢犯祠。為了加速鏡像的下載法严,可以給Docker配置國(guó)內(nèi)的鏡像地址。
編輯/etc/docker/daemon.json加入以下內(nèi)容
{
"registry-mirrors": ["https://XXXX.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ù)對(duì)非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)更簡(jiǎ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"]
}
7.配置日志驅(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"
}
}
8.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ī)歹篓。
rancher 安裝
單節(jié)點(diǎn)在線安裝
配置ssl 證書并安裝rancher
出于安全考慮瘫证,使用Rancher時(shí)需要SSL進(jìn)行加密。SSL可以保護(hù)所有Rancher網(wǎng)絡(luò)通信庄撮,例如登錄或與集群交互背捌。
1. 方案A-使用默認(rèn)自簽名證書
默認(rèn)情況下,Rancher會(huì)自動(dòng)生成一個(gè)用于加密的自簽名證書洞斯。從您的Linux主機(jī)運(yùn)行Docker命令來安裝Rancher载萌,而不需要任何其他參數(shù):
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v <主機(jī)路徑>:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e CATTLE_SYSTEM_CATALOG=bundled \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable (或者rancher/rancher:latest)
2. 方案B-使用您自己的自簽名證書
Rancher安裝可以使用自己生成的自簽名證書,如果沒有自簽名證書巡扇,可一鍵生成自簽名ssl證書扭仁。
提示
使用OpenSSL或其他方法創(chuàng)建自簽名證書。
這里的證書不需要進(jìn)行base64加密厅翔。
證書文件必須是PEM格式乖坠。
在您的證書文件中,包含鏈中的所有中間證書刀闷。有關(guān)示例熊泵,請(qǐng)參考SSL常見問題/故障排除仰迁。
您的Rancher安裝可以使用您提供的自簽名證書來加密通信。創(chuàng)建證書后顽分,運(yùn)行docker命令時(shí)把證書文件映射到容器中徐许。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v <主機(jī)路徑>:/var/lib/rancher/ \
-v /var/log/rancher/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-v /etc/<CERT_DIRECTORY>/tls.crt:/etc/rancher/ssl/cert.pem \
-v /etc/<CERT_DIRECTORY>/tls.key:/etc/rancher/ssl/key.pem \
-v /etc/<CERT_DIRECTORY>/cacerts.pem:/etc/rancher/ssl/cacerts.pem \
rancher/rancher:stable (或者rancher/rancher:latest)
3. 方案C-使用權(quán)威CA機(jī)構(gòu)頒發(fā)的證書
如果您公開發(fā)布您的應(yīng)用,理想情況下應(yīng)該使用由權(quán)威CA機(jī)構(gòu)頒發(fā)的證書卒蘸。
提示
證書必須是PEM格式,PEM只是一種證書類型雌隅,并不是說文件必須是PEM為后綴,具體可以查看證書類型缸沃。
確保容器包含您的證書文件和密鑰文件恰起。由于您的證書是由認(rèn)可的CA簽署的,因此不需要安裝額外的CA證書文件趾牧。
給容器添加--no-cacerts參數(shù)禁止Rancher生成默認(rèn)CA證書检盼。
這里的證書不需要進(jìn)行base64加密。
獲取證書后翘单,運(yùn)行Docker命令以部署Rancher吨枉,同時(shí)指向證書文件。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v <主機(jī)路徑>:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e CATTLE_SYSTEM_CATALOG=bundled \
-e AUDIT_LEVEL=3 \
-v /etc/<CERT_DIRECTORY>/tls.crt:/etc/rancher/ssl/cert.pem \
-v /etc/<CERT_DIRECTORY>/tls.key:/etc/rancher/ssl/key.pem \
rancher/rancher:stable (或者rancher/rancher:latest) --no-cacerts