之前就已經裝過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集羣搭建完成,謝謝大家觀看!