背景
標(biāo)題由于公司架構(gòu)主要是采用公有云k8s運(yùn)維部署,所以在學(xué)習(xí)了解過(guò)程中,記錄本地安裝k8s主要過(guò)程。
本文主要記錄了,在虛擬機(jī)環(huán)境下,安裝Kubernetes的過(guò)程,其中有很多本地踩過(guò)的坑,撰寫(xiě)本文,
也希望能夠幫助到大家。
1.安裝說(shuō)明
安裝環(huán)境 由于博主使用的是mac系統(tǒng),所以,虛擬機(jī)使用的是Parallels Desktop(14.1.3),個(gè)人感覺(jué)這個(gè)是在mac很好用的虛擬機(jī),安裝很簡(jiǎn)單,網(wǎng)上都可以找到教程。
- 虛擬機(jī)系統(tǒng) CentOS7
- 安裝規(guī)劃
mster節(jié)點(diǎn) 1臺(tái)
node節(jié)點(diǎn) 1臺(tái)
虛擬機(jī)網(wǎng)絡(luò)配置 主機(jī)能夠ping上述虛擬機(jī)的任何一臺(tái);上述兩臺(tái)機(jī)之前需要能夠互相ping通,而且需要保證master節(jié)點(diǎn)與node節(jié)點(diǎn)的IP地址保持不變。虛擬機(jī)網(wǎng)絡(luò)配置這塊,本文給不了教程,大家還需要搜索資料。如果是Parallels Desktop虛擬機(jī),采用默認(rèn)的就好。
安裝方法 采用Kubernetes提供的kebuadm進(jìn)行安裝。由于自己手動(dòng)部署配置,很復(fù)雜,本文采用了Kubernetes自帶的kubeadm進(jìn)行安裝。
2.安裝步驟
2.1安裝Docker
1. 刪除機(jī)器上的舊版Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安裝必要的一些系統(tǒng)工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3. 添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4. 更新并安裝Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
5.開(kāi)啟Docker服務(wù)
sudo service docker start
6.添加用戶組 配置系統(tǒng)開(kāi)機(jī)啟動(dòng)
# 添加用戶組
sudo groupadd docker
sudo usermod -aG docker $USER
#系統(tǒng)啟動(dòng)
sudo systemctl enable docker
7.安裝成功后,可以使用docker version 查看docker的運(yùn)行情況。
以上的安裝步驟,參考阿里云的安裝說(shuō)明,https://yq.aliyun.com/articles/110806。其中也包含其他系統(tǒng)的安裝Docker說(shuō)明。安裝成功后,鑒于國(guó)內(nèi)下載鏡像速度的原因,也可以配置docker的鏡像加速器,具體可參考阿里云的開(kāi)源鏡像市場(chǎng),https://developer.aliyun.com/mirror。其中包含很多的源,后面用到k8s的國(guó)內(nèi)源,在上面也可以找到。??
2.2 安裝kubeadm,kubectl,kubelet
在安裝之前,主要是針對(duì)CentOS系統(tǒng)的一些配置,類似關(guān)閉內(nèi)存共享,防火墻等等。
# 1.關(guān)閉swap
# 臨時(shí)禁用
sudo swapoff -a
# 永久禁用(推薦)先打開(kāi)對(duì)于文件,注釋掉swap那一行
vim /etc/fstab
# 2.關(guān)閉SELinux
# 臨時(shí)禁用
setenforce 0
# 永久禁用(推薦)
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
# 3.關(guān)閉防火墻
systemctl disable firewalld
systemctl stop firewalld
# 4.修改網(wǎng)絡(luò)參數(shù)(如果這步不設(shè)置,后面安裝會(huì)有問(wèn)題)
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
# 5.修改國(guó)內(nèi)安裝的k8s鏡像下載源(如果能夠科學(xué)上網(wǎng),可以直接使用google對(duì)應(yīng)的官方安裝文檔,直接安裝)
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
## 重建yum緩存
yum clean all
yum makecache fast
yum -y update
# 6.執(zhí)行安裝
# 這步執(zhí)行的時(shí)間依賴于你自己的網(wǎng)絡(luò),會(huì)需要一段時(shí)間,采用以下命令會(huì)安裝最新版本,如果按照指定版本需要帶上版本號(hào)。如果在這一步指定了版本號(hào),在集群初始化的時(shí)候,也必須加上版本號(hào)。
yum install -y kubelet kubeadm kubectl
# 安裝成功后驗(yàn)證
kubeadm version
#設(shè)置開(kāi)機(jī)啟動(dòng)
systemctl enable kubelet && systemctl statt kubelet
至此,以上的步驟(包括安裝Docker)都必須在master與node節(jié)點(diǎn)中執(zhí)行。
2.3 初始化集群(初始化master)
# 初始化k8s集群 注意命令中的版本號(hào)。由于之前安裝 kubeadm kubectl kebulet 采用的是最新版本,所以在初始化的時(shí)候也必須制定對(duì)應(yīng)的版本號(hào)。'--pod-network-cidr=10.244.0.0/16'參數(shù),是由于需要安裝fannel網(wǎng)絡(luò)時(shí),必須指定的。關(guān)于fannel網(wǎng)絡(luò)及安裝,大家可以查看相關(guān)資料。https://github.com/coreos/flannel/blob/master/Documentation/kubernetes.md。
# 在初始化成功后,安裝日志會(huì)打印一段類似于‘kubeadm join 10.211.55.39:6443 --token jh7j30.3e4igzontf4vep3x --discovery-token-ca-cert-hash sha256:ca6086e0594aa2935bc1c6f2152739119c5179ddcdaf3a2bd95ea827c2d3e305’ 的日志,該命令就是node節(jié)點(diǎn)加入此集群的命令。
# 初始化成功后,日志還會(huì)打印一些叫你執(zhí)行的sh日志('mkdir -p $HOME/.kube 等等,總共3條'),目的主要是用戶的相關(guān)操作,直接復(fù)制執(zhí)行即可
kubeadm init --image-repository registry.aliyuncs.com/google_containers -kubernetes-version v1.16.0 --pod-network-cidr=10.244.0.0/16
# 安裝fannel 大家可以參考kubeadm git地址:https://github.com/coreos/flannel#flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
此步驟,只需在master節(jié)點(diǎn)上執(zhí)行。等待系統(tǒng)下載對(duì)應(yīng)的鏡像后,使用kubectl get pod --all-namespace來(lái)查看當(dāng)前集群中的pod運(yùn)行情況,待所有的pod處于running狀態(tài),及表示master初始化成功。
2.4 將node加入集群
在node節(jié)點(diǎn)上,執(zhí)行上述打印日志的‘kubeadm join .....’ 日志。然后,在maste節(jié)點(diǎn)上,執(zhí)行kubectl get node,查看節(jié)點(diǎn)。如果類似于下圖,則恭喜你,Kubernetes安裝成功!
2.5 node節(jié)點(diǎn)ROLES為none處理
在上述node截圖中,如果ROLES列為none,則通過(guò)打標(biāo)簽來(lái)進(jìn)行修復(fù)。其實(shí),該列的實(shí)現(xiàn)就是通過(guò)標(biāo)簽來(lái)實(shí)現(xiàn),不過(guò)這個(gè)標(biāo)簽比較特殊。如果master節(jié)點(diǎn)的ROLES為none,則可為master的節(jié)點(diǎn)打上標(biāo)簽node-role.kubernetes.io/master=;如果node節(jié)點(diǎn)的ROLES為none,則可為node節(jié)點(diǎn)打上標(biāo)簽node-role.kubernetes.io/node=。
總結(jié):
文章主要以實(shí)用參考,并沒(méi)有提供每個(gè)步驟執(zhí)行截圖,所以對(duì)于新手,可能不太適合。仔細(xì)把整個(gè)流程首先梳理一遍,然后再動(dòng)手,可能效果會(huì)更好。安裝主要痛點(diǎn)就是在下載Kubernetes鏡像問(wèn)題,目前采用國(guó)內(nèi)的阿里云的源,問(wèn)題不大。不過(guò)也會(huì)可能出現(xiàn)下載不了的問(wèn)題,我第一次安裝的時(shí)候,在執(zhí)行yum install -y kubelet kubeadm kubectl進(jìn)行安裝時(shí),就提示下載不了對(duì)應(yīng)的鏡像,如果出現(xiàn)這種情況,要么就等阿里云同步成功,要么就使用其他的源,華為或者網(wǎng)易貌似也有。