Kubeadm 部署kubernetes


一、環境准備

1.1 操作系統

角色 IP 部署內容
master 192.168.10.109 kubeadm kubelet kubectl
node1 192.168.10.107 kubeadm kubelet
node2 192.168.10.108 kubeadm kubelet

  修改/etc/hosts文件,加入maste和node節點信息

1.2 關閉防火牆

systemctl stop firewalld
systemctl disable firewalld

1.3 關閉swap

1 swapoff -a
2 修改/etc/fstab 注釋掉關於swap部分

二、安裝docker

2.1 安裝

安裝docker
1.更新yum包
    yum update
2.卸載舊版本
    yum remove docker
3.安裝依賴
    yum install -y yum-utils device-mapper-persistent-data lvm2
4.設置yum源
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5.安裝docker
    yum install docker-ce
6.啟動docker
    systemctl start docker
    systemctl enable docker 
7.驗證安裝是否成功
    docker version

2.2 替換國內源

vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}
systemctl restart docker.service

2.3 配置k8s源

 1 /etc/yum.repos.d/kubernetes.repo
 2 
 3 [kubernetes]
 4 name=Kubernetes Repo
 5 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
 6 gpgcheck=1
 7 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 8 enable=1
 9 
10 
11 wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
12 rpm --import rpm-package-key.gpg
13 yum repolist

 

三、安裝Kubernetes

以下部分在master上執行

3.1 安裝kubeadm和相關工具

yum -y install kubelet kubeadm kubectl --disableexcludes=kubernets

此時kubectl可能會起不來,可以在kubeadm init完成后再啟動

3.2 kubeadm  config

執行kubeadm config print init-defaults,獲取默認的初始化參數文件

kubeadm config print init-defaults > init.default.yaml

將該文件保存備用

3.3 列出所需的鏡像列表

kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.18.3
k8s.gcr.io/kube-controller-manager:v1.18.3
k8s.gcr.io/kube-scheduler:v1.18.3
k8s.gcr.io/kube-proxy:v1.18.3
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
 k8s.gcr.io鏡像倉庫地址在國內無法訪問,可以使用下面地址替代
 registry.cn-hangzhou.aliyuncs.com/google_containers
沒有v1.18.3就找v1.18.2
images=(kube-apiserver:v1.18.3kube-controller-manager:v1.18.3kube-scheduler:v1.18.3kube-proxy:v1.18.3pause:3.2etcd:3.4.3-0coredns:1.6.7
)

for imageName in ${images[@]};do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName  k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName

3.4 初始化環境

kubeadm init 
# 這一步注意,如果需要特定的網絡插件,需要額外加參數,具體看網絡插件的介紹
保存好 kubeadm join的信息
kubeadm join 192.168.10.109:6443 --token 3fntt0.e0k8ivnl1p6cxesy \
    --discovery-token-ca-cert-hash sha256:f98b963683b0370f6b24ca7ea4577a08acbf9ce9a88902aadfe115b8a2c258a7

 

報錯信息  
以下修改在node節點上也執行

1)detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
修改或創建/etc/docker/daemon.json,加入下面的內容:
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker

2)/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables


3)/proc/sys/net/ipv4/ip_forward contents are not set to 1
echo "1" >/proc/sys/net/ipv4/ip_forward

[ERROR Swap]: running with swap on is not supported. Please disable swap
swapoff -a
vim /etc/fstab 注釋掉swap部分

 

3.5 配置授權信息

按照init最后部分提示執行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此時已經在master上安裝完成了Kubernetes,但集群內還沒有可以用的Node,並缺乏對容器網絡的配置
啟動master上的kubelet
systemctl start kubelet && systemctl enable kubelet

 

Kubernetes官方默認策略是worker節點運行Pod,master節點不運行Pod。如果為了測試或開發目的部署單節點集群,可以通過以下命令設置:

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

 

3.6 配置node節點

對於新節點的加入,系統准備和Kubernetes yum源配置過程一樣

yum install kubelet kubeadm --disableexcludes=kubernetes

將node節點加入集群

kubeadm join 192.168.10.109:6443 --token 3fntt0.e0k8ivnl1p6cxesy  \
   --discovery-token-ca-cert-hash sha256:f98b963683b0370f6b24ca7ea4577a08acbf9ce9a88902aadfe115b8a2c258a7

在node節點上啟動kubelet

systemctl start kubelet && systemctl enable kubelet

 

四、網絡插件

在master上執行kubectl get nodes命令,會發現Kubernetes提示節點為NotReady狀態,這是因為還沒有安裝CNI網絡插件

 

# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   27m     v1.18.3
node1    NotReady   <none>   4m26s   v1.18.3
node2    NotReady   <none>   4m5s    v1.18.3

4.1 flannel

需要在kubeadm init 時設置 --pod-network-cidr=10.244.0.0/16

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

 

 4.2 weave

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

 

4.3 calico

需要 kubeadm init 時設置 --pod-network-cidr=192.168.0.0/16

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml 

例如選擇weave插件,執行命令安裝

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

 

 4.5 驗證Kubernetes集群是否安裝成功

kubectl  get pods -n kube-system

NAME                             READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-hqqz7         1/1     Running   0          73m
coredns-66bff467f8-z2hr4         1/1     Running   0          73m
etcd-master                      1/1     Running   1          73m
kube-apiserver-master            1/1     Running   1          73m
kube-controller-manager-master   1/1     Running   1          73m
kube-proxy-fhzcv                 1/1     Running   0          50m
kube-proxy-jhmp5                 1/1     Running   0          50m
kube-proxy-n7ldl                 1/1     Running   1          73m
kube-scheduler-master            1/1     Running   1          73m
weave-net-2d6sz                  2/2     Running   0          32m
weave-net-jfxbt                  2/2     Running   0          32m
weave-net-kmj98                  2/2     Running   0          32m

其中有些可能不能啟動,大部分原因就是鏡像獲取不到,如果是k8s.gcr.io倉庫的,可以把之前下載

到master上的鏡像導入到node節點上

查看pod啟動失敗的原因 
kubectl -n kube-system describe pod <pod-name>

查看節點是否都Ready

# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   73m   v1.18.3
node1    Ready    <none>   50m   v1.18.3
node2    Ready    <none>   50m   v1.18.3

至此,通過kubeadm工具就實現了Kubernetes集群的安裝。

 


免責聲明!

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



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