最近為了搭建自己的k8s集群筒狠,遇到好多問題,今天終于安裝成功了箱沦。故記錄下來辩恼,給需要的小伙伴參考。
安裝環(huán)境:
環(huán)境:ubuntu16.04
1個master
3個node
預(yù)先準(zhǔn)備:
(1)四臺ubuntu16.04版本的服務(wù)器(也可以是3,5臺)
(2)所有節(jié)點(diǎn)都是root登錄谓形,并在master節(jié)點(diǎn)上設(shè)置免密登錄灶伊,讓master節(jié)點(diǎn)能免密登錄到任何節(jié)點(diǎn)。至于如何免密登錄寒跳,請參考我的文章:ubuntu設(shè)置免密登錄
安裝步驟:
(1)安裝docker谁帕,【在所有節(jié)點(diǎn)上執(zhí)行】
執(zhí)行下面的腳本
#!/bin/bash
#SET UP THE REPOSITORY
apt-get remove docker docker-engine docker.io
apt-get update
apt-get install -y -q \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -
add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
#install docker
apt-get update && apt-get install docker-ce=18.06.0~ce~3-0~ubuntu
可能遇到的問題:安裝docker的時候可能會遇到問題,找不到docker-ce這個包
解決方法:apt-get upgrade
查看docker安裝是否成功:docker version
(2)安裝kubeadm, kubelet,kubectl 【在master節(jié)點(diǎn)執(zhí)行】
a. 下載k8s_ubuntu_deb.zip冯袍,這里是將kubeadm, kubelet,kubectl先下載下來本地安裝. 下載地址:https://github.com/zoux86/k8s/blob/master/k8s_ubuntu_deb.zip
b.然后在解壓后的目錄執(zhí)行下面的命令
#!/bin/bash
apt-get install -y -q socat ebtables ethtool
dpkg -i kubernetes-cni_0.5.1-00_amd64.deb
dpkg -i kubelet_1.8.7-00_amd64.deb
dpkg -i kubectl_1.8.7-00_amd64.deb
dpkg -i kubeadm_1.8.7-00_amd64.deb
systemctl enable kubelet
systemctl start kubelet
(3)提前獲取所需要的鏡像
由于被墻的原因碾牌。這里是提前從dockerhub上下載所需要的鏡像康愤,然后tag為google鏡像。執(zhí)行下面的命令:
#!/bin/bash
ufw disable
# 關(guān)閉swap,重啟后會失效舶吗,可加入到啟動腳本rc.local里
swapoff -a
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
# pull鏡像重新標(biāo)記tag
images=(kube-scheduler-amd64:v1.8.7 \
kube-apiserver-amd64:v1.8.7 \
kube-proxy-amd64:v1.8.7 \
kube-controller-manager-amd64:v1.8.7
etcd-amd64:3.0.17 \
pause-amd64:3.0 \
k8s-dns-sidecar-amd64:1.14.5 \
k8s-dns-kube-dns-amd64:1.14.5 \
k8s-dns-dnsmasq-nanny-amd64:1.14.5 \
kubernetes-dashboard-amd64:v1.8.1)
for imageName in ${images[@]} ; do
docker pull andylo25/$imageName
docker tag andylo25/$imageName gcr.io/google_containers/$imageName
docker rmi andylo25/$imageName
done
(4)啟動集群征冷,master節(jié)點(diǎn)
kubeadm init --kubernetes-version=v1.8.7 --pod-network-cidr 10.244.0.0/16
初始化正常后會在最后的地方一個加入集群的提示命令:
如下:
kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919
(5)如果非root用戶下想使用kubelet,進(jìn)行下面的操作
切換到非root用戶下誓琼,然后執(zhí)行下面的命令:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
到這一步可以使用 kubectl get pods -n kube-system
查看pod的情況检激,處理fannel節(jié)點(diǎn)不正常外,其他pod都是正常running的.
如果查看不成功腹侣,顯示拒絕訪問或者端口權(quán)限問題叔收,在命令行加入這個命令:
export KUBECONFIG=/etc/kubernetes/kubelet.conf
然后在使用kubectl命令。
(6) 安裝網(wǎng)絡(luò)插件
安裝cni插件flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
注意:一定要使用v0.9.1傲隶。千萬不要使用https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml饺律,用這個會有問題,親測跺株。
這時候kubectl get pods -n kube-system复濒,會發(fā)現(xiàn)所有的pod都啟動起來了。
(7)向集群中加入node節(jié)點(diǎn) 【所有work節(jié)點(diǎn)上】
a.確保所有節(jié)點(diǎn)都安裝了docker
b. 解壓k8s_ubuntu_deb.zip乒省,在同級目錄下執(zhí)行下面的腳本
#!/bin/bash
ufw disable
# 關(guān)閉swap,重啟后會失效巧颈,可加入到啟動腳本rc.local里
swapoff -a
cat >> /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
# 安裝k8s相關(guān)軟件
apt-get install -y -q socat ebtables ethtool
dpkg -i kubernetes-cni_0.5.1-00_amd64.deb
dpkg -i kubelet_1.8.7-00_amd64.deb
dpkg -i kubectl_1.8.7-00_amd64.deb
dpkg -i kubeadm_1.8.7-00_amd64.deb
systemctl enable kubelet
systemctl start kubelet
# pull鏡像重新標(biāo)記tag
images=(kube-proxy-amd64:v1.8.7 \
pause-amd64:3.0 \
kubernetes-dashboard-amd64:1.8.1)
for imageName in ${images[@]} ; do
docker pull andylo25/$imageName
docker tag andylo25/$imageName gcr.io/google_containers/$imageName
docker rmi andylo25/$imageName
done
c. # 執(zhí)行加入集群命令 【這個不要抄我的,用你主節(jié)點(diǎn)輸出的join命令】
kubeadm join --token 34fb5a.87ec418b32857c65 192.168.129.133:6443 --discovery-token-ca-cert-hash sha256:da4765f5721db7ed2130c265a71e849005f0334aeb821cd05ec9c9020e036919
等待一段時間袖扛,在master上執(zhí)行:
kubectl get node
kubectl get pods -n kube-system
會發(fā)現(xiàn)所有的節(jié)點(diǎn)已經(jīng)加入砸泛,并工作正常。
可能遇到的問題:
(1) 如果發(fā)現(xiàn)pod都是正常運(yùn)行的,node是 Ready,SchedulingDisabled 狀態(tài)
解決方法:kubectl uncordon node-ip
使用uncordon命令解除對node-ip機(jī)器的限制