Kubernetes ---- kubeadm安裝kubernetes

 

  之前就已經裝過k8s了,有些東西不常用真的就是容易忘掉,今天我又搞了一遍,並記錄下來以此加深印象;

一、環境描述:

  kubernetes的版本選擇的是v1.15.0版本(之前第一次裝還是1.11);

操作系統 IP地址 集羣中角色 k8s需用的docker鏡像
Centos 7 192.168.222.100 Master

quay.io/coreos/flannel:v0.12.0-amd64

k8s.gcr.io/kube-proxy:v1.15.0

k8s.gcr.io/kube-apiserver:v1.15.0

k8s.gcr.io/kube-scheduler:v1.15.0

k8s.gcr.io/kube-controller-manager:v1.15.0

k8s.gcr.io/coredns:1.3.1

k8s.gcr.io/etcd:3.3.10

k8s.gcr.io/pause:3.1

Centos 7 192.168.222.101 Node

quay.io/coreos/flannel:v0.12.0-amd64

k8s.gcr.io/kube-proxy:v1.15.0

k8s.gcr.io/pause:3.1

Centos 7 192.168.222.102 Node

quay.io/coreos/flannel:v0.12.0-amd64

k8s.gcr.io/kube-proxy:v1.15.0

k8s.gcr.io/pause:3.1

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、環境準備:

1.修改本地hosts文件,添加GitHub及集羣內部主機的解析(添加了GitHub相關的地址後會省去很多麻煩= =)node節點也要加哦.

~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.222.100 node1
192.168.222.101 node2
192.168.222.192 node3
# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End

2.關閉防火牆以及停用Selinux.

~]# systemctl stop firewalld
~]# setenfoce 0

3. 配置Kubernetes的yum源(以下內容是阿里雲的內容).

源地址:https://developer.aliyun.com/mirror/kubernetes
~]# 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=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

4. 配置docker源

~]# yum install -y yum-utils device-mapper-persistent-data lvm2
~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

三、安裝、配置Master

1. 首先要在各服務器上執行以下命令安裝軟件包.(手動指定軟件包版本是很不錯的選擇,剛開始沒指定,默認會安裝最新版的,最後你在國內找不到最新版的鏡像纔是最衰的,血淋淋的例子!.)

~]# yum -y install docker-ce
~]# yum -y install kubeadm-1.15.0 kubectl-1.15.0 kubelet-1.15.0

2. 啓動docker

~]# systemctl start docker

3. 撰寫(下載->改名->刪除鏡像)腳本(由於初始化需要下載鏡像,但鏡像都在外網,所以採用以下方法,腳本比較無腦,不過倒是能用,還是Python大法好,我本地沒裝Python3,沒辦法= =)

    #!/bin/bash
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.0
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.0
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.0
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.0
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1

    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.0 k8s.gcr.io/kube-controller-manager:v1.15.0
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.0 k8s.gcr.io/kube-scheduler:v1.15.0
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.0 k8s.gcr.io/kube-proxy:v1.15.0
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.0
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.0
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.0
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.0
    docker rmi registry.cn-hangzhou.aliyuncs.com/google

4. 編輯kubelet配置文件,增加忽略swap相關配置

注意:如果執行過kubeadm reset("恢復出廠設置")命令,則需要重新編輯此文件(因爲我第一次初始化的時候出了問題,所以最後才發現默認此文件也恢復了.)

~]# vim /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"

5. 開始初始化Master,初始化如果成功了的話呢,就會看到"successfully"字樣,如果有問題則去看"/var/log/message"的日誌;(記得保留初始化成功後的信息;)

# 建議添加"--apiserver-advertise-address"參數,指定Master的地址,我這裏就傻了,沒有指定,結果莫名其妙的給了我一個地址,我也不知道是什麼鬼東西
~]# kubeadm init --pod-network-cidr 10.244.0.0/16 --service-cidr 10.96.0.0/12 --ignore-preflight-errors=swap

可能出現的問題:

The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error:

這個問題,網上衆說紛紛,有說沒有在hosts文件裏定義的,也有說要在cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf加東西的,其實就是因爲swap內存的原因,當出現這個問題的時候回到第4步檢查一下配置文件裏是否還有添加的那條指令.

6. 配置網絡(flannel),下面的命令是flannel官方提供的,只要是k8s1.7+版本以上的就可直接使用

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

7. 鏡像打包傳輸至node節點

[Master節點操作]
~]# mkdir imgs
~]# docker save quay.io/coreos/flannel:v0.12.0-amd64 -o flannel.tar
~]# docker save k8s.gcr.io/kube-proxy:v1.15.0 -o kube-proxy.tar
~]# docker save k8s.gcr.io/pause:3.1 -o pause.tar
~]# mv *.tar imgs/
~]# scp -r imgs/ root@192.168.222.100:/root

8. Master上檢查(爲什麼我下面突然變了用戶,是當你初始化結束後要創建一個普通用戶,並拷貝到home目錄下,初始化成功後控制檯有操作步驟)

# 檢查一下集羣狀態,現在node節點還沒有添加進來,所以只有這一條,而且你看的時候不一定是Ready狀態(因爲基於系統命名空間的一些Pod不一定都啓動完成了)
[kubeadm@node1 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION node1 Ready master 3h25m v1.15.0
# 檢查一下系統級命名空間的pod是否已經啓動成功,我有些pod分佈在node2,node3上是因爲我已經將他們加入集羣了.
[kubeadm@node1 ~]$ kubectl get pods - n kube-system -o wide

# 查看控制器的狀態,目前都是ok正常的,那麼可以繼續啦

 [kubeadm@node1 ~]$ kubectl get cs

四、安裝、配置各Node

各Node節點上的前三步與Master上的1、2、4步驟相同,此處不再過多演示

4. 將Node加入至cluster(這條命令在初始化了maser後會自動產生,直接copy過來即可,除了"--ignore-preflight-error=swap"需手動添加)

~]# kubeadm join 192.168.133.128:6443 --token u2pjqq.dxkbgfjtawmc7933     --discovery-token-ca-cert-hash \ 
sha256:520516b0ea9516f638ffdb5fdef8a50de5d0e14f1afc1b98e6c61d20f77fc8ac --ignore-preflight-errors=swap

5. 加載Master傳過來的鏡像,成功加入至集羣后控制檯也會打印一定信息,我記不住打啥了,然後加載鏡像就ok.

~]# docker load -i /root/img/flannel.tar
~]# docker load -i /root/img/kube-proxy.tar
~]# docker load -i /root/img/pause.tar
~]# systemctl restart kubelet

 

五、回到Master檢查集羣狀態及各Pod狀態

~]$ kubectl get pods -n kube-system -o wide 

~]$ kubectl get nodes

 

 

至此,Kubernetes集羣搭建完成,謝謝大家觀看!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章