滿足以下條件
一臺或多臺機器,操作系統(tǒng) CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多
集群中所有機器之間網(wǎng)絡(luò)互通
可以訪問外網(wǎng),需要拉取鏡像
禁止swap分區(qū)
創(chuàng)新互聯(lián)為客戶提供專業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、成都手機網(wǎng)站制作等網(wǎng)站方面業(yè)務(wù)。
說在前面的話,kubeadm是k8s官方推出的一個用于快速部署一套k8s集群的工具,而在近幾年現(xiàn)在kubeadm上生產(chǎn)的公司也有了,不過對于各個方面對于集群的管理以及二次性的開發(fā),大多數(shù)都是采用二進(jìn)制的方式進(jìn)行去部署生產(chǎn)上的k8s集群,由于k8s版本更新比較頻繁,像對于拿k8s集群進(jìn)行一些測試方面的操作,平時希望自己能夠快速的部署一套進(jìn)行測試,而對于二進(jìn)制以及Ansible部署的方式當(dāng)然也可以部署,不過二進(jìn)制就慢了很多,像ansible的話還得需要一臺服務(wù)器單獨拿出來做管理節(jié)點,對于我們平時拿虛擬機去測試的話,如果自己的機器比較緊張,kubeadm也是一個比較不錯的選擇,另外也是嘗試一下新版本的k8s,緊跟官方新版本的腳步。
在kubeadm中有兩條重要的命令,一個是kubeadm init,一個是kubeadm join, init 主要的實現(xiàn)就是去創(chuàng)建一個master節(jié)點,而在運行init之后,首先會運行一系列的輸出,首先它會檢查你的docker版本或者你的swap有沒有關(guān)閉,因為docker首先是必須要運行的,在k8s集群中,docker是用來啟動我們的容器和鏡像的下載的,而swap需要進(jìn)行關(guān)閉,這是k8s官方提出的一個默認(rèn)的規(guī)則,在k8s-1.8之后就是需要你關(guān)閉swap,否則會出現(xiàn)報錯,目的開啟swap會占用大的內(nèi)存,也會對性能影響很大的消耗。
第二它會生成一個用來認(rèn)證k8s組件之間進(jìn)行調(diào)用的CA證書,證書有兩套,第一個就是k8s的證書,另一套就是etcd的證書,而這個證書kubeadm安裝的放置證書的位置在/etc/kubernetes/pki下面。
第三它會把kubelet、controller-manager和scheduler等組件的配置文件寫到/etc/kubernets/目錄中,里面包含了一些證書文件,這些主要用來連接api-server,除了上面幾個配置文件,還會生成一個管理相關(guān)的admin.conf文件
第四它會生成token文件,如果其他節(jié)點加入進(jìn)來到master的話,就會使用到這個token
第五設(shè)置一些允許節(jié)點以 Bootstrap Tokens) 和 TLS bootstrapping 方式加入集群的必要的操作
設(shè)置csr請求自動認(rèn)證的機制,這個的話,kubeadm是自己做好的,部署過二進(jìn)制的應(yīng)該知道,當(dāng)node加入進(jìn)來的時候,我們需要對它授權(quán)approve,手動允許加入集群中
第六,部署DNS服務(wù),kube-proxy插件,當(dāng)然一般DNS服務(wù)需要我們部署好flannel網(wǎng)絡(luò)插件之后,這個服務(wù)才能運行起來
大概的流程是這樣的,詳情請看官網(wǎng)文檔
https://kubernetes.io/
k8s-master 192.168.1.15
k8s-node1 192.168.1.11
k8s-node2 192.168.1.14
系統(tǒng)初始化配置(每個節(jié)點都需要配置)
關(guān)閉防火墻:
#systemctl stop firewalld
#systemctl disable firewalld
關(guān)閉selinux:
#sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
#setenforce 0 # 臨時
關(guān)閉swap:
#swapoff -a # 臨時
#vim /etc/fstab # 永久
設(shè)置主機名:主機名根據(jù)自己的主機去使用這條命令#hostnamectl set-hostname <hostname>
每臺主機添加hosts:
#cat >> /etc/hosts << EOF
192.168.1.15 k8s-master
192.168.1.11 k8s-node1
192.168.1.14 k8s-node2
EOF
將橋接的IPv4流量傳遞到iptables的鏈:
#cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#sysctl --system # 生效
時間同步:
#yum install ntpdate -y
#ntpdate us.pool.ntp.org
Kubernetes默認(rèn)CRI(容器運行時)為Docker,因此先安裝Docker。
3.1 安裝Docker
#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#yum -y install docker-ce-18.06.1.ce-3.el7
#systemctl enable docker && systemctl start docker
#docker --version
Docker version 18.06.1-ce, build e68fc7a
鏡像加速劑
Daocloud公司建議使用,提高鏡像下載速度,使用k8s官方默認(rèn)的cgroup的
systemd
#more /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"exec-opts":["native.cgroupdriver=systemd"]
}
重啟docker
#systemctl restart docker
3.2 所有節(jié)點添加阿里云YUM軟件源
#cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
3.3 所有節(jié)點安裝kubeadm,kubelet和kubectl
由于版本更新頻繁,這里指定版本號部署:
#yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
#systemctl enable kubelet
在192.168.1.15(Master)執(zhí)行
并將--apiserver -advertise-address的地址寫成master的地址
由于默認(rèn)拉取鏡像地址k8s.gcr.io國內(nèi)無法訪問,這里指定阿里云鏡像倉庫地址。
對于其他的辦法,或者就是提前將鏡像下載好,然后導(dǎo)進(jìn)去,其實這塊阿里云倉庫默認(rèn)已經(jīng)有維護(hù)的k8s組件的鏡像了,這里直接可以使用
#kubeadm init \
--apiserver-advertise-address=192.168.1.15 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
kubeadm init,執(zhí)行init 初始化之后會顯示k8s的版本,第二就是檢查配置比如swap關(guān)閉,docker的cgroup,k8s默認(rèn)需要的是systemd的驅(qū)動程序,另外需要去下載k8s組件所需要的鏡像,這里需要等待一會.....
[init] Using Kubernetes version: v1.17.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
使用kubectl工具:
默認(rèn)init初始化之后會輸入下面應(yīng)該操作的步驟,直接執(zhí)行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
由于我們的網(wǎng)絡(luò)cni插件還沒有部署,所以它的狀態(tài)一直是未就緒狀態(tài)
#kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 19m v1.17.0
#mkdir /k8s-cni
#wget -P /k8s-cni https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
默認(rèn)這個網(wǎng)絡(luò)插件下載會出現(xiàn)一些問題,拉取不到,導(dǎo)致網(wǎng)絡(luò)不通,節(jié)點無法準(zhǔn)備就緒
可以改成這個鏡像地址,到flannel的yaml下,找到amd64有兩行放置flannel的鏡像的位置替換為:zhaocheng172/flannel:v0.11.0-amd64
確保flannel起來
#kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-9d85f5447-htzgm 1/1 Running 0 27m
kube-system coredns-9d85f5447-sz9kg 1/1 Running 0 27m
kube-system etcd-k8s-master 1/1 Running 0 27m
kube-system kube-apiserver-k8s-master 1/1 Running 0 27m
kube-system kube-controller-manager-k8s-master 1/1 Running 0 27m
kube-system kube-flannel-ds-amd64-5r2qv 1/1 Running 0 4m13s
kube-system kube-proxy-npgrm 1/1 Running 0 27m
kube-system kube-scheduler-k8s-master 1/1 Running 0 27m
在192.168.1.11/14(Node)執(zhí)行。
向集群添加新節(jié)點,執(zhí)行在kubeadm init輸出的kubeadm join命令:
加入之后需要等待一會時間,因為它會像k8s的node節(jié)點都啟動兩個flanneld的進(jìn)行,打通跨主機節(jié)點之間容器的通信,驗證命令kubectl get pod -A
#kubeadm join 192.168.1,15:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
#kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 55m v1.17.0
k8s-node1 Ready 25m v1.17.0
k8s-node2 Ready 25m v1.17.0