使用vagrant和kubeadm搭建k8s集群


 

 

1. 准備環境

16G 4核CPU 主機一台 

2. 安裝virtual box

3. 安裝vagrant

4. Vagrantfile

# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.require_version ">= 1.6.0" boxes = [ { :name => "k8s-master", :eth1 => "192.168.205.120", :mem => "2048", :cpu => "2" }, { :name => "k8s-node1", :eth1 => "192.168.205.121", :mem => "2048", :cpu => "1" }, { :name => "k8s-node2", :eth1 => "192.168.205.122", :mem => "2048", :cpu => "1" } ] Vagrant.configure(2) do |config| config.vm.box = "centos/7" boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = opts[:mem] v.vmx["numvcpus"] = opts[:cpu] end config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", opts[:mem]] v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end config.vm.provision "shell", privileged: true, path: "./setup.sh" end 

4. setup.sh

#/bin/sh  # install some tools sudo yum install -y vim telnet bind-utils wget  # install docker #curl -fsSL get.docker.com -o get-docker.sh #sh get-docker.sh  ## 安裝docker  # step 1: 安裝必要的一些系統工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2  # Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum-config-manager --disable docker-ce-edge yum-config-manager --disable docker-ce-test  # Step 3: 更新並安裝 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce  # Step 4: 開啟Docker服務 sudo service docker start  # Step 5: 更改cgroup driver sudo bash -c ' cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF' if [ ! $(getent group docker) ]; then  sudo groupadd docker; else echo "docker user group already exists" fi sudo gpasswd -a $USER docker sudo systemctl daemon-reload sudo systemctl restart docker  #rm -rf get-docker.sh  # open password auth for backup if ssh key doesn't work, bydefault, username=vagrant password=vagrant sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config sudo systemctl restart sshd sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF'  # 也可以嘗試國內的源 http://ljchen.net/2018/10/23/%E5%9F%BA%E4%BA%8E%E9%98%BF%E9%87%8C%E4%BA%91%E9%95%9C%E5%83%8F%E7%AB%99%E5%AE%89%E8%A3%85kubernetes/ sudo setenforce 0  # install kubeadm, kubectl, and kubelet. #sudo yum install -y kubelet kubeadm kubectl sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes sudo systemctl enable docker && systemctl start docker sudo systemctl enable kubelet && systemctl start kubelet sudo bash -c 'cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward=1 EOF' sudo sysctl --system sudo systemctl stop firewalld sudo systemctl disable firewalld sudo swapoff -a sudo systemctl enable docker.service sudo systemctl enable kubelet.service sudo cat ./pull.sh for i in \`kubeadm config images list\`; do imageName=${i#k8s.gcr.io/} sudo docker pull registry.aliyuncs.com/google_containers/$imageName sudo docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName sudo docker rmi registry.aliyuncs.com/google_containers/$imageName done; 

6. 啟動vagrant & vagrant命令

$ vagrant init      # 初始化 $ vagrant up        # 啟動虛擬機 $ vagrant halt      # 關閉虛擬機 $ vagrant reload    # 重啟虛擬機 $ vagrant ssh       # SSH 至虛擬機 $ vagrant suspend   # 掛起虛擬機 $ vagrant resume    # 喚醒虛擬機 $ vagrant status    # 查看虛擬機運行狀態 $ vagrant destroy   # 銷毀當前虛擬機_ vagrant ssh NAME 登錄主機 

8. 主節點上執行

sudo kubeadm init --pod-network-cidr 172.100.0.0/16 --apiserver-advertise-address 192.168.205.120 
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 

安裝網絡插件

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" 

9. node節點

sudo kubeadm join 192.168.205.120:6443 --token tte278.145ozal6u6e26ypm --discovery-token-ca-cert-hash sha256:cbb168e0665fe1b14e96a87c2da5dc1eeda04c70932ac1913d989753703277bb 

10.修改節點IP

https://blog.csdn.net/qianghaohao/article/details/98588427 參考這里

vi /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--node-ip=<eth1 網口 IP>"

"--node-ip=192.168.205.120"

10. 故障排查

查看kubelet服務是否啟動成功

sudo systemctl status kubelet 

查看服務日志

sudo journalctl -xefu kubelet

kubeadm + vagrant 部署多節點 k8s 的一個坑

kubeadm + vagrant 部署多節點 k8s 的一個坑

之前寫過一篇「使用 kubeadm 搭建 kubernetes 集群」教程,教程里面使用 Vagrant 啟動 3 個節點,1 個 master,2 個 node 節點,后來使用過程中才慢慢發現還是存在問題的。具體問題表現是:

  1. kubectl get node -o wide 查看到節點 IP 都是:10.0.2.15;
[root@master ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master Ready master 5m11s v1.15.1 10.0.2.15 <none> CentOS Linux 7 (Core) 3.10.0-862.2.3.el7.x86_64 docker://19.3.1 node1 Ready <none> 2m31s v1.15.1 10.0.2.15 <none> CentOS Linux 7 (Core) 3.10.0-862.2.3.el7.x86_64 docker://19.3.1 
  1. kubect get pod 可以查看 pod,pod 也運行正常,但是無法查看 pod 日志,也無法 kubectl exec -it 進入 pod。具體報錯如下:
[root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-5754944d6c-gnqjg 1/1 Running 0 66s nginx-deployment-5754944d6c-mxgn7 1/1 Running 0 66s [root@master ~]# kubectl logs nginx-deployment-5754944d6c-gnqjg Error from server (NotFound): the server could not find the requested resource ( pods/log nginx-deployment-5754944d6c-gnqjg) [root@master ~]# kubectl exec -it nginx-deployment-5754944d6c-gnqjg sh error: unable to upgrade connection: pod does not exist 

帶着上面兩個問題,於是網上搜索一番,找到了根因並得以解決:
https://github.com/kubernetes/kubernetes/issues/60835

主要原因

Vagrant 在多主機模式時每個主機的 eth0 網口 ip 都是 10.0.2.15,這個網口是所有主機訪問公網的出口,用於 nat 轉發。而 eth1才是主機真正的 IP。kubelet 在啟動時默認讀取的是 eth0 網卡的 IP,因此在集群部署完后 kubect get node -o wide 查看到節點的 IP 都是 10.0.2.15。

[vagrant@master ~]$ ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 85708sec preferred_lft 85708sec
    inet6 fe80::5054:ff:fec9:c704/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:25:1b:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.26.10/24 brd 192.168.26.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe25:1b45/64 scope link
       valid_lft forever preferred_lft forever
...

解決方法

上面知道問題的根本原因是 k8s 節點 IP 獲取不對導致訪問節點出現問題,那么解決方法就是調整 kubelet 參數設置正確的
IP 地址:
編輯 /etc/sysconfig/kubelet 文件,KUBELET_EXTRA_ARGS 環境變量添加 --node-ip 參數:

KUBELET_EXTRA_ARGS="--node-ip=<eth1 網口 IP>"

然后重啟 kubelet:systemctl restart kubelet
執行 kubectl get node -o wide 發現節點 IP 已經改變成了KUBELET_EXTRA_ARGS 變量指定的 IP。

[root@master ~]# kubectl get node -o wide
NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
master   Ready    master   24m   v1.15.1   192.168.26.10   <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://19.3.1
node1    Ready    <none>   21m   v1.15.1   10.0.2.15       <none>        CentOS Linux 7 (Core)   3.10.0-862.2.3.el7.x86_64   docker://19.3.1

用同樣的方法修改其他節點 IP 即可。
為了方便,這里提供了一個命令,自動化上面步驟:

echo KUBELET_EXTRA_ARGS=\"--node-ip=`ip addr show eth1 | grep inet | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}/" | tr -d '/'`\" > /etc/sysconfig/kubelet systemctl restart kubelet

使用 kubeadm 搭建 kubernetes 集群

使用 kubeadm 搭建 kubernetes 集群

kubeadm 簡介

kubeadm 是 k8s 官方提供的用於快速部署 k8s 集群的命令行工具,也是官方推薦的最小化部署 k8s 集群的最佳實踐,比起直接用二進制部署能省去很多工作,因為該方式部署的集群的各個組件以 docker 容器的方式啟動,而各個容器的啟動都是通過該工具配自動化啟動起來的。

kubeadm 不僅僅能部署 k8s 集群,還能很方便的管理集群,比如集群的升級、降級、集群初始化配置等管理操作。

kubeadm 的設計初衷是為新用戶提供一種便捷的方式來首次試用 Kubernetes, 同時也方便老用戶搭建集群測試他們的應用。

kubeadm 的使用案例:

  • 新用戶可以從 kubeadm 開始來試用 Kubernetes。
  • 熟悉 Kubernetes 的用戶可以使用 kubeadm 快速搭建集群並測試他們的應用。
  • 大型的項目可以將 kubeadm 和其他的安裝工具一起形成一個比較復雜的系統。

安裝環境要求

  • 一台或多台運行着下列系統的機器:
    • Ubuntu 16.04+
    • Debian 9
    • CentOS 7
    • RHEL 7
    • Fedora 25/26
    • HypriotOS v1.0.1+
    • Container Linux (針對1800.6.0 版本測試)
  • 每台機器 2 GB 或更多的 RAM (如果少於這個數字將會影響您應用的運行內存)
  • 2 CPU 核心或更多(節點少於 2 核的話新版本 kubeadm 會報錯)
  • 集群中的所有機器的網絡彼此均能相互連接(公網和內網都可以)
  • 禁用 Swap 交換分區。(Swap 分區必須要禁掉,否則安裝會報錯)

准備環境

本文使用 kubeadm 部署一個 3 節點的 k8s 集群:1 個 master 節點,2 個 node 節點。各節點詳細信息如下:

Hostname IP OS 發行版 內存(GB) CPU(核)
k8s-master 192.168.10.100 Centos7 2 2
k8s-node-1 192.168.10.101 Centos7 2 2
k8s-node-2 192.168.10.102 Centos7 2 2

在這里插入圖片描述

kubeadm 安裝 k8s 集群完整流程

  • 使用 Vagrant 啟動 3 台符合上述要求的虛擬機
  • 調整每台虛擬機的服務器參數
  • 各節點安裝 docker、kubeadm、kubelet、kubectl 工具
  • 使用 kubeadm 部署 master 節點
  • 安裝 Pod 網絡插件(CNI)
  • 使用 kubeadm 部署 node 節點

接下來我們依次介紹每步的具體細節:

使用 Vagrant 啟動 3 台符合上述要求的虛擬機

Vagrant 的使用在這里不具體介紹了,如需了解請點擊這里
本文用到的 Vagrantfile:

# -*- mode: ruby -*- # vi: set ft=ruby : # author: qhh0205 $num_nodes = 2 Vagrant.configure("2") do |config| # k8s 主節點定義及初始化配置 config.vm.define "k8s-master" do | k8s_master | k8s_master.vm.box = "Centos7" k8s_master.vm.hostname = "k8s-master" k8s_master.vm.network "private_network", ip: "192.168.10.100" k8s_master.vm.provider "virtualbox" do | v | v.name = "k8s-master" v.memory = "2048" v.cpus = 2 end end # k8s node 節點定義及初始化配置 (1..$num_nodes).each do |i| config.vm.define "k8s-node-#{i}" do |node| node.vm.box = "Centos7" node.vm.hostname = "k8s-node-#{i}" node.vm.network "private_network", ip: "192.168.10.#{i+100}" node.vm.provider "virtualbox" do |v| v.name = "k8s-node-#{i}" v.memory = "2048" v.cpus = 2 end end end end 

進入 Vagrantfile 文件所在目錄,執行如下命令啟動上述定義的 3 台虛擬機:

vagrant up

調整每台虛擬機的服務器參數

  1. 禁用 swap 分區:
    臨時禁用:swapoff -a
    永久禁用:sed -i '/swap/s/^/#/g' /etc/fstab
    swap 分區必須禁止掉,否則 kubadm init 自檢時會報如下錯誤:
[ERROR Swap]: running with swap on is not supported. Please disable swap 
  1. 將橋接的 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 

如果不進行這一步的設置,kubadm init 自檢時會報如下錯誤:

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1 
  1. 關閉網絡防火牆:
systemctl stop firewalld
systemctl disable firewalld
  1. 禁用 SELinux:
    臨時關閉 selinux(不需要重啟主機): setenforce 0
    永久關閉 selinux(需要重啟主機才能生效):sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

各節點安裝 docker、kubeadm、kubelet、kubectl 工具

安裝 Docker

配置 Docker yum 源(阿里 yum 源):

curl -sS -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

安裝 docker:

yum install --nogpgcheck -y yum-utils device-mapper-persistent-data lvm2 yum install --nogpgcheck -y docker-ce systemctl enable docker && systemctl start docker 
安裝 kubeadm、kubelet、kubectl 工具

配置相關工具 yum 源(阿里 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=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 

安裝 kubeadm、kubelet、kubectl:
其實 kubeadm、kubelet、kubectl 這三個工具的版本命名是一致的(和 k8s 版本命名一致),我們可以指定安裝特定的版本,即安裝指定版本的 k8s 集群。

查看哪些版本可以安裝:
yum --showduplicates list kubeadm|kubelet|kubectl

在這里我們安裝 1.13.2 版本:

yum install -y kubeadm-1.13.2 kubelet-1.13.2 kubectl-1.13.2 # 設置 kubelet 開機自啟動: kubelet 特別重要,如果服務器重啟后 kubelet # 沒有啟動,那么 k8s 相關組件的容器就無法啟動。在這里不需要把 kubelet 啟動 # 起來,因為現在還啟動不起來,后續執行的 kubeadm 命令會自動把 kubelet 拉起來。 systemctl enable kubelet 

使用 kubeadm 部署 master 節點

登陸 master 節點執行如下命令:

kubeadm init --kubernetes-version v1.13.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.10.100 

參數說明:
--kubernetes-version: 安裝指定版本的 k8s 版本,該參數和 kubeadm 的版本有關,特定版本的 kubeadm 並不能安裝所有版本的 k8s,最好還是 kubeadm 的版本和該參數指定的版本一致。

--image-repository: 該參數僅在高版本(具體哪個版本沒仔細查,反正在 1.13.x 中是支持的)的 kubeadm 中支持,用來設置 kubeadm 拉取 k8s 各組件鏡像的地址,默認拉取的地址是:k8s.gcr.io。眾所周知 k8s.gcr.io 國內是無法訪問的,所以在這里改為阿里雲鏡像倉庫。

--pod-network-cidr: 設置 pod ip 的網段 ,網段之所以是 10.244.0.0/16,是因為后面安裝 flannel 網絡插件時,yaml 文件里面的 ip 段也是這個,兩個保持一致,不然可能會使得 Node 間 Cluster IP 不通。這個參數必須得指定,如果這里不設置的話后面安裝 flannel 網絡插件時會報如下錯誤:

E0317 17:02:15.077598       1 main.go:289] Error registering network: failed to acquire lease: node "k8s-master" pod cidr not assigned

--apiserver-advertise-address: API server 用來告知集群中其它成員的地址,這個參數也必須得設置,否則 api-server 容器啟動不起來,該參數的值為 master 節點所在的本地 ip 地址。


題外話:像之前沒有 --image-repository 這個參數時,大家為了通過 kubeadm 安裝 k8s 都是采用"曲線救國"的方式:先從別的地方把同樣的鏡像拉到本地(當然鏡像的 tag 肯定不是 k8s.gcr.io/xxxx),然后將拉下來的鏡像重新打個 tag,tag 命名成和執行 kubeadm init 時真正拉取鏡像的名稱一致(比如:k8s.gcr.io/kube-controller-manager-amd64:v1.13.2)。這么做顯然做了很多不必要的工作,幸好現在有了 --image-repository 這個參數能自定義 kubeadm 拉取 k8s 相關組件的鏡像地址了。


執行上面命令后,如果出現如下輸出(截取了部分),則表示 master 節點安裝成功了:

... [bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.10.100:6443 --token jm6o42.9ystvjarc6u09pjp --discovery-token-ca-cert-hash sha256:64405f3a90597e0ebf1f33134649196047ce74df575cb1a7b38c4ed1e2f94421 

根據上面輸出知道:要開始使用集群普通用戶執行下面命令:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 

現在就可以使用 kubectl 訪問集群了:

[vagrant@k8s-master ~]$ kubectl get node NAME STATUS ROLES AGE VERSION k8s-master NotReady master 13m v1.13.2 

可以看出現在 master 節點還是 NotReady 狀態,這是因為默認情況下,為了保證 master 的安全,master 是不會被分配工作負載的。你可以取消這個限制通過輸入(不建議這樣做,我們后面會向集群中添加兩 node 工作節點):

$ kubectl taint nodes --all node-role.kubernetes.io/master-

安裝 Pod 網絡插件(CNI)

Pod 網絡插件有很多種,具體見這里:https://kubernetes.io/docs/concepts/cluster-administration/addons/,我們選擇部署 Flannel 網絡插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

使用 kubeadm 部署 node 節點

前面已經將 master 節點部署完了,接下來部署 node 節點就很簡單了,在 node節點執行如下命令將自己加到 k8s 集群中(復制 master 節點安裝完后的輸出):

kubeadm join 192.168.10.100:6443 --token jm6o42.9ystvjarc6u09pjp --discovery-token-ca-cert-hash sha256:64405f3a90597e0ebf1f33134649196047ce74df575cb1a7b38c4ed1e2f94421 

出現如下輸出(截取了部分)表示成功將 node 添加到了集群:

... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the master to see this node join the cluster. 

在 master 節點查看 node 狀態,如果都為 Ready,則表示集群搭建完成:

[vagrant@k8s-master ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 14m v1.13.2 k8s-node-1 Ready <none> 3m v1.13.2 

用同樣的方法把另一個節點也加入到集群中。

相關資料

https://purewhite.io/2017/12/17/use-kubeadm-setup-k8s/
https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/
https://k8smeetup.github.io/docs/admin/kubeadm/

Kubeadm 結合 Vagrant 自動化部署最新版 Kubernetes 集群

之前寫過一篇搭建 k8s 集群的教程:「使用 kubeadm 搭建 kubernetes 集群」,教程中用到了 kubeadm 和 vagrant,但是整個過程還是手動一步一步完成:創建節點--> 節點配置、相關軟件安裝 --> 初始化 master 節點 --> node 節點加入 master 節點。其實這個過程完全可以通過 Vagrant 的配置器自動化來實現,達到的目的是啟動一個 k8s 只需在 Vagrant 工程目錄執行:vagrant up 即可一鍵完成集群的創建。

本文主要介紹如何使用 Kubeadm 結合 Vagrant 自動化 k8s 集群的創建,在了解了 kubeadm 手動搭建 kubernetes 集群的過程后,自動化就簡單了,如果不了解請參見之前的文章:「使用 kubeadm 搭建 kubernetes 集群」,梳理下整個過程,在此不做過多介紹。下面大概介紹下自動化流程:

  1. 首先抽象出來每個節點需要執行的通用腳本,完成一些常用軟件的安裝、docker 安裝、kubectl 和 kubeadm 安裝,還有一些節點的系統級配置:
    具體實現腳本見:https://github.com/qhh0205/kubeadm-vagrant/blob/master/install-centos.sh

  2. 編寫 Vagrantfile,完成主節點的初始化安裝和 node 節點加入主節點。但是有個地方和之前手動安裝不太一樣,為了自動化,我們必須在 kubeadm 初始化 master 節點之前生成 TOKEN(使用其他任意主機的 kubeadm 工具生成 TOKEN 即可),然后自動化腳本統一用這個 TOKEN 初始化主節點和從節點加入。Vagrantfile 具體實現見:https://github.com/qhh0205/kubeadm-vagrant/blob/master/Vagrantfile

完整的 Vagrant 工程在這里:https://github.com/qhh0205/kubeadm-vagrant
使用 kubeadm + vagrant 自動化部署 k8s 集群,基於 Centos7 操作系統。該工程 fork 自 kubeadm-vagrant, 對已知問題進行了修復:節點設置正確的 IP 地址「set-k8s-node-ip.sh」。否則使用過程中會出現問題,具體問題見這里:「kubeadm + vagrant 部署多節點 k8s 的一個坑」。其他一些調整:節點初始化腳本更改、Vagrantfile 添加 Shell 腳本配置器,運行初始化腳本。

默認:1 個 master 節點,1 個 node 節點,可以根據需要修改 Vagrantfile 文件,具體見工程 README.md 說明。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM