來源
中文教程 http://blog.51cto.com/devingeng/2096495?from=singlemessage
官方文檔 https://kubernetes.io/docs/setup/independent/install-kubeadm/
准備
1 centOS 7
2 以root登陸(建議)
3 關閉防火牆
關閉firewall,iptables:
systemctl stop firewalld.service#停止firewall
systemctl disable firewalld.service#禁止firewall開機啟動
firewall-cmd --state#查看默認防火牆狀態(關閉后顯示not running,開啟后顯示running)
4 關閉SElinux
暫時關閉:
setenforce 0
永久關閉:
vim /etc/selinux/config打開selinux配置文件
找到SELINUX=參數
參數可選(enforcing、permissive、disabled)
disabled即為關閉SElinux
5 關閉swap
swapoff -a
6 配置系統內核參數使流過網橋的流量也進入iptables/netfilter框架中,開啟ipv4的forwarding
在/etc/sysctl.conf中添加以下配置:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward=1
如果報出參數不存在,則執行modprobe br_netfilter即可
並執行sysctl -p
7 配置阿里雲鏡像
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
EOF
yum -y install epel-release
yum clean all
yum makecache
安裝相關工具
以下內容於51CTO博客作者Devin的原創作品整理而來,如需轉載,請注明出處
1 安裝docker以及kubeadm相關工具
yum -y install docker kubelet kubeadm kubectl
2 啟動docker以及kubeadm服務
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
3 下載K8S相關鏡像
因為無法直接訪問gcr.io下載鏡像,所以需要配置一個國內的容器鏡像加速器:
登錄 https://cr.console.aliyun.com/
在頁面中找到並點擊鏡像加速按鈕,即可看到屬於自己的專屬加速鏈接,選擇Centos版本后即可看到配置方法。
解決完加速器的問題之后,開始下載k8s相關鏡像,下載后將鏡像名改為k8s.gcr.io/開頭的名字,以便kubeadm識別使用:(注意將版本號替換為當前安裝的版本)
#!/bin/bash
images=(kube-proxy-amd64:v1.11.0 kube-scheduler-amd64:v1.11.0 kube-controller-manager-amd64:v1.11.0 kube-apiserver-amd64:v1.11.0
etcd-amd64:3.2.18 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
k8s-dns-dnsmasq-nanny-amd64:1.14.8 coredns:1.1.3)
for imageName in ${images[@]} ; do
docker pull keveon/$imageName
docker tag keveon/$imageName k8s.gcr.io/$imageName
docker rmi keveon/$imageName
done
4 初始化安裝K8S Master
下載完成后,執行kubeadm init:
kubeadm init --kubernetes-version=v1.11.0 --pod-network-cidr=192.168.0.0/16
執行過程中可能會出現版本問題,此時自行按照版本提示使用docker pull ...獲得相應鏡像並改名即可
上面的命令大約需要1分鍾的過程,期間可以觀察下tail -f /var/log/message日志文件的輸出,掌握該配置過程和進度。上面最后一段的輸出信息保存一份,后續添加工作節點還要用到。
類似於
kubeadm join 10.211.55.10:6443 --token 1xuwcb.oijnat5tkla6r384 --discovery-token-ca-cert-hash sha256:bcbf083a3fab2422ae0615b421d71a2275f2a974746989e59672a100a071ba30
5.配置kubectl認證信息(Master節點操作)
對於非root用戶
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
對於root用戶
export KUBECONFIG=/etc/kubernetes/admin.conf
也可以直接放到~/.bash_profile
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
6.安裝網絡組件
這里我們使用Calico:
kubectl apply -f \
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
然后使用watch kubectl get pods --all-namespaces檢查coreDNS運行狀態,如果為running則可以繼續
7.在本機運行pods
執行
kubectl taint nodes --all node-role.kubernetes.io/master-
允許master上調度pods
搭建新的NODE並join進集群
准備
首先安裝新的虛擬機並安裝CentOS,然后按照本文第一部分安裝kubeadm和docker等組件
join
將master init后輸出的提示在新機器上執行
kubeadm join 10.211.55.10:6443 --token 1xuwcb.oijnat5tkla6r384 --discovery-token-ca-cert-hash sha256:bcbf083a3fab2422ae0615b421d71a2275f2a974746989e59672a100a071ba30
即可加入集群
默認token的有效期為24小時,當過期之后,該token就不可用了。解決方法如下:
重新生成新的token
kubeadm token create
kubeadm token list
獲取ca證書sha256編碼hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
節點加入集群
kubeadm join --token aa78f6.8b4cafc8ed26c34f --discovery-token-ca-cert-hash sha256:...
關閉node
在master執行
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name>
在該node執行
kubectl reset
即可關閉該node
