<code>原創不易,請多多支持!對軟件技術感興趣的童鞋請關注我,後續技術分享更精彩。/<code>
容器編排從幾年前群雄割據、各方亂戰,到如今Google的k8s一統天下。能迅速力挽狂瀾,已說明其技術實力。但k8s複雜的架構,不太友好的文檔,確實讓一些初學者望而卻步。近期正好一直在學習k8s的東西,走了一些彎路。整理出來以備參考。
由於內容過多,本文將分多章介紹k8s集群構建過程,併發布demo到k8s集群,簡單演示一個完整CI/CD的自動化過程。各章節內容如下:
<code>一、k8s集群環境準備 二、rancher搭建k8s集群環境 三、Jenkins自動化構建示例到k8s集群/<code>
部署資源
centos7.7虛擬機3臺,對應ip如下:
<code>- 192.168.0.110 - 192.168.0.111 - 192.168.0.112/<code>
192.168.0.110 : rancher和jenkins部署機器。
192.168.0.111/192.168.0.112:k8s集群node節點。筆者機器資源所限,超過3臺虛擬機,個人筆記本電腦將無法工作。使用者可根據具體情況增加虛擬機節點。
環境準備
安裝k8s集群前,請務必按以下操作初始化工作環境。否則後續k8s集群可能出現各種不可預期錯誤。筆者就因一個ipv4端口問題浪費2天時間。
注:未特別說明,後續操作默認在所有虛擬機節點上安裝。
docker環境安裝
添加阿里docker鏡像源,沒有daemon.json,請自行新增相應文件。
<code>vi /etc/docker/daemon.json/<code>
<code>{ "registry-mirrors": ["https://registry.docker-cn.com"] }/<code>
docker環境安裝請參考以下官方文檔,這裡不再詳述。
https://docs.docker.com/install/linux/docker-ce/centos/
添加k8s國內鏡像源
<code>cat < /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/<code>
設置主機名
設置k8s node節點主機名。192.168.0.110為公共服務rancher和Jenkins,無需設置。
<code>cat >> /etc/hosts <code>
退出,重新登錄 root 賬號,可以看到主機名生效。
關閉防火牆
關閉防火牆,清理防火牆規則,設置默認轉發策略:
<code>systemctl stop firewalld systemctl disable firewalld iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat iptables -P FORWARD ACCEPT/<code>
關閉 swap 分區
關閉 swap 分區,否則kubelet 會啟動失敗(可以設置 kubelet 啟動參數 --fail-swap-on 為 false 關閉 swap 檢查):
<code>swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab /<code>
關閉 SELinux
關閉 SELinux,否則 kubelet 掛載目錄時可能報錯 Permission denied:
<code>setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config/<code>
優化內核參數
<code>cat > kubernetes.conf <code>
關閉 tcp_tw_recycle,否則與 NAT 衝突,可能導致服務不通;
設置系統時區
<code>timedatectl set-timezone Asia/Shanghai/<code>
設置系統時鐘同步
<code>systemctl enable chronyd systemctl start chronyd /<code>
查看同步狀態:
<code>timedatectl status /<code>
輸出:
System clock synchronized: yes NTP service: active RTC in local TZ: no System clock synchronized: yes,表示時鐘已同步; NTP service: active,表示開啟了時鐘同步服務;
將當前的 UTC 時間寫入硬件時鐘
<code>timedatectl set-local-rtc 0 /<code>
重啟依賴於系統時間的服務
<code>systemctl restart rsyslog systemctl restart crond/<code>
k8s集群資源環境準備完成,請關注我,瞭解後續k8s CI/CD自動化集成過程。