您好,登錄后才能下訂單哦!
滿足以下條件
一臺或多臺機器,操作系統 CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2個CPU或更多CPU,硬盤30GB或更多
集群中所有機器之間網絡互通
可以訪問外網,需要拉取鏡像
禁止swap分區
說在前面的話,kubeadm是k8s官方推出的一個用于快速部署一套k8s集群的工具,而在近幾年現在kubeadm上生產的公司也有了,不過對于各個方面對于集群的管理以及二次性的開發,大多數都是采用二進制的方式進行去部署生產上的k8s集群,由于k8s版本更新比較頻繁,像對于拿k8s集群進行一些測試方面的操作,平時希望自己能夠快速的部署一套進行測試,而對于二進制以及Ansible部署的方式當然也可以部署,不過二進制就慢了很多,像ansible的話還得需要一臺服務器單獨拿出來做管理節點,對于我們平時拿虛擬機去測試的話,如果自己的機器比較緊張,kubeadm也是一個比較不錯的選擇,另外也是嘗試一下新版本的k8s,緊跟官方新版本的腳步。
在kubeadm中有兩條重要的命令,一個是kubeadm init,一個是kubeadm join, init 主要的實現就是去創建一個master節點,而在運行init之后,首先會運行一系列的輸出,首先它會檢查你的docker版本或者你的swap有沒有關閉,因為docker首先是必須要運行的,在k8s集群中,docker是用來啟動我們的容器和鏡像的下載的,而swap需要進行關閉,這是k8s官方提出的一個默認的規則,在k8s-1.8之后就是需要你關閉swap,否則會出現報錯,目的開啟swap會占用大的內存,也會對性能影響很大的消耗。
第二它會生成一個用來認證k8s組件之間進行調用的CA證書,證書有兩套,第一個就是k8s的證書,另一套就是etcd的證書,而這個證書kubeadm安裝的放置證書的位置在/etc/kubernetes/pki下面。
第三它會把kubelet、controller-manager和scheduler等組件的配置文件寫到/etc/kubernets/目錄中,里面包含了一些證書文件,這些主要用來連接api-server,除了上面幾個配置文件,還會生成一個管理相關的admin.conf文件
第四它會生成token文件,如果其他節點加入進來到master的話,就會使用到這個token
第五設置一些允許節點以 Bootstrap Tokens) 和 TLS bootstrapping 方式加入集群的必要的操作
設置csr請求自動認證的機制,這個的話,kubeadm是自己做好的,部署過二進制的應該知道,當node加入進來的時候,我們需要對它授權approve,手動允許加入集群中
第六,部署dns服務,kube-proxy插件,當然一般DNS服務需要我們部署好flannel網絡插件之后,這個服務才能運行起來
大概的流程是這樣的,詳情請看官網文檔
https://kubernetes.io/
k8s-master 192.168.1.15
k8s-node1 192.168.1.11
k8s-node2 192.168.1.14
系統初始化配置(每個節點都需要配置)
關閉防火墻:
#systemctl stop firewalld
#systemctl disable firewalld
關閉selinux:
#sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
#setenforce 0 # 臨時
關閉swap:
#swapoff -a # 臨時
#vim /etc/fstab # 永久
設置主機名:主機名根據自己的主機去使用這條命令#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默認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官方默認的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 所有節點添加阿里云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 所有節點安裝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)執行
并將--apiserver -advertise-address的地址寫成master的地址
由于默認拉取鏡像地址k8s.gcr.io國內無法訪問,這里指定阿里云鏡像倉庫地址。
對于其他的辦法,或者就是提前將鏡像下載好,然后導進去,其實這塊阿里云倉庫默認已經有維護的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,執行init 初始化之后會顯示k8s的版本,第二就是檢查配置比如swap關閉,docker的cgroup,k8s默認需要的是systemd的驅動程序,另外需要去下載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工具:
默認init初始化之后會輸入下面應該操作的步驟,直接執行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
由于我們的網絡cni插件還沒有部署,所以它的狀態一直是未就緒狀態
#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
默認這個網絡插件下載會出現一些問題,拉取不到,導致網絡不通,節點無法準備就緒
可以改成這個鏡像地址,到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)執行。
向集群添加新節點,執行在kubeadm init輸出的kubeadm join命令:
加入之后需要等待一會時間,因為它會像k8s的node節點都啟動兩個flanneld的進行,打通跨主機節點之間容器的通信,驗證命令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 <none> 25m v1.17.0
k8s-node2 Ready <none> 25m v1.17.0
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。