kubeadm初始化Kubernetes集群(yum)


 

 

 

[root@master ~]# cat /etc/hosts

192.168.116.241 master
192.168.116.240 node1
192.168.116.251 node2

 

[root@master ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@master yum.repos.d]# vim kubernetes.repo
[kubernetes]
name=Kubernete Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpkcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

 

 

安裝docker  kuber 插件

[root@master yum.repos.d]# cd /root/
[root@master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
[root@master ~]# rpm --import yum-key.gpg
[root@master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@master ~]# rpm --import rpm-package-key.gpg 


[root@master yum.repos.d]# yum install docker-ce kubelet kubeadm kubectl

 

master 啟動docker 配置鏡像

由於k8s安裝有很多鏡像國內下載不到,因為編輯如下的配置文件可以找到需要的鏡像,啟動docker前,在Service配置段里定義環境變量,Environment,表示通過這個代理去加載k8s所需的鏡像,加載完成后,可以注釋掉,僅使用國內的加速器來拉取非k8s的鏡像,后續需要使用時,再開啟。

[root@master ~]# vim /usr/lib/systemd/system/docker.service 
Environment="HTTPS_PROXY=http://www.ik8s.io:10080" 
Environment="NO_PROXY=127.0.0.0/8,192.168.110.0/24"

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl start docker

[root@master bridge]# docker info
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

[root@master bridge]# vim /etc/sysctl.conf 

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

[root@master bridge]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /etc/systemd/system/kubelet.service.
[root@master bridge]# systemctl enable docker

 

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

 

初始化kube

[root@master ~]#  kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

[init] using Kubernetes version: v1.11.2
[preflight] running pre-flight checks
        [WARNING Hostname]: hostname "master" could not be reached
        [WARNING Hostname]: hostname "master" lookup master on 100.100.2.136:53: no such host
[preflight] Some fatal errors occurred:
        [ERROR KubeletVersion]: the kubelet version is higher than the control plane version. This is not a supported version skew and may lead to a malfunctional cluster. Kubelet version: "1.12.2" Control plane version: "1.11.2"
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
[root@master ~]# kubeadm init --kubernetes-version=v1.12.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
[init] using Kubernetes version: v1.12.2
[preflight] running pre-flight checks
        [WARNING Hostname]: hostname "master" could not be reached
        [WARNING Hostname]: hostname "master" lookup master on 100.100.2.136:53: no such host
[preflight/images] Pulling images required for setting up a Kubernetes cluster
[preflight/images] This might take a minute or two, depending on the speed of your internet connection
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull'
[preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.12.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.12.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.12.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.12.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.1: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.2.24: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.2.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: proxyconnect tcp: dial tcp 172.96.236.117:10080: connect: connection refused
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
發現報錯 拉不到鏡像

初始化過程,默認會到gcr.io/google_containers站點拉取相關k8s的鏡像信息,當前國內不能進行這些站點的訪問,如果網絡不能訪問google,則會出現鏡像錄取失敗的報錯

https://console.cloud.google.com/gcr/images/google-containers?project=google-containers

v1.12.2版本初始化需要的鏡像如下

k8s.gcr.io/kube-apiserver-amd64:v1.12.1

k8s.gcr.io/kube-controller-manager-amd64:v1.12.1

k8s.gcr.io/kube-scheduler-amd64:v1.12.1

k8s.gcr.io/kube-proxy-amd64:v1.12.1

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd-amd64:3.2.24

k8s.gcr.io/coredns:1.2.2

執行如下的腳步進行安裝

 

[root@master ~]# cat  pullimages.sh 
images=(
    kube-apiserver:v1.12.1
    kube-controller-manager:v1.12.1
    kube-scheduler:v1.12.1
    kube-proxy:v1.12.1
    pause:3.1
    etcd:3.2.24
    coredns:1.2.2
)

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
done

 

鏡像拉取成功后再重新執行init命令

初始化命令執行成功后,執行如下的命令,啟動集群

kubeadm join 192.168.116.241:6443 --token oz31po.qu86h666qp1kyava --discovery-token-ca-cert-hash sha256:852b91fa9180b5b296845724d9b5f78a8976e730b6c47987668b4a3504f9005c

獲取組件的健康狀態

[root@master ~]#  mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# kubectl  get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                   
etcd-0               Healthy   {"health": "true"} 
[root@master ~]# kubectl  get node
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   18m   v1.12.2

這里status未就緒,是因為沒有網絡插件,如flannel.地址https://github.com/coreos/flannel可以查看flannel在github上的相關項目,執行如下的命令自動安裝flannel

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   23m   v1.12.2

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   25m   v1.12.2

[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-576cbf47c7-2jhdm         1/1     Running   0          26m
coredns-576cbf47c7-pmvc2         1/1     Running   0          26m
etcd-master                      1/1     Running   2          2m16s
kube-apiserver-master            1/1     Running   3          2m16s
kube-controller-manager-master   1/1     Running   2          2m16s
kube-flannel-ds-amd64-rn5js      1/1     Running   0          6m20s
kube-proxy-69j8k                 1/1     Running   2          26m
kube-scheduler-master            1/1     Running   2          52s


[root@master ~]# kubectl get ns
NAME          STATUS   AGE
default       Active   26m
kube-public   Active   26m
kube-system   Active   26m

 

node節點

關閉 swapoff

swapoff -a

開啟轉發的參數,根據實際報錯情況開啟,一般有如下三項

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
[root@node2 ~]# systemctl start docker
[root@node2 ~]# systemctl enable docker
[root@node2 ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /etc/systemd/system/kubelet.service.

 

注意,kubelet此時不啟動,因為缺配置文件,啟動也會報錯,所以不啟動

設置開機啟動,必須的操作

 

要執行如下的命令,加入master節點,注意,如下命令token和discovery-token-ca-cert-hash是隨機生成,可以用命令查找,比較麻煩,建議安裝成功后,在成功的信息中,如下的命令需要保存,后期方便加入主節點。

[root@node1 ~]# kubeadm join 192.168.116.241:6443 --token oz31po.qu86h666qp1kyava --discovery-token-ca-cert-hash sha256:852b91fa9180b5b296845724d9b5f78a8976e730b6c47987668b4a3504f9005c

  

 

 

[root@master ~]# kubectl get pods -n kube-system -o wide
NAME                             READY   STATUS              RESTARTS   AGE     IP                NODE     NOMINATED NODE
coredns-576cbf47c7-2jhdm         1/1     Running             0          39m     10.244.0.2        master   <none>
coredns-576cbf47c7-pmvc2         1/1     Running             0          39m     10.244.0.3        master   <none>
etcd-master                      1/1     Running             2          15m     192.168.116.241   master   <none>
kube-apiserver-master            1/1     Running             3          15m     192.168.116.241   master   <none>
kube-controller-manager-master   1/1     Running             2          15m     192.168.116.241   master   <none>
kube-flannel-ds-amd64-7dfs7      0/1     Init:0/1            0          3m51s   192.168.116.251   node2    <none>
kube-flannel-ds-amd64-rn5js      1/1     Running             0          19m     192.168.116.241   master   <none>
kube-flannel-ds-amd64-zkh7r      0/1     Init:0/1            0          4m3s    192.168.116.240   node1    <none>
kube-proxy-69j8k                 1/1     Running             2          39m     192.168.116.241   master   <none>
kube-proxy-7n7f4                 0/1     ContainerCreating   0          4m3s    192.168.116.240   node1    <none>
kube-proxy-pjq2d                 0/1     ContainerCreating   0          3m51s   192.168.116.251   node2    <none>
kube-scheduler-master            1/1     Running             2          13m     192.168.116.241   master   <none>
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE     VERSION
master   Ready      master   40m     v1.12.2
node1    NotReady   <none>   4m42s   v1.12.2
node2    NotReady   <none>   4m30s   v1.12.2

 

 

[root@master ~]#  kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   62m   v1.12.2
node1    Ready    <none>   26m   v1.12.2
node2    Ready    <none>   26m   v1.12.2

 

 

 

排查一

 

kubectl get pods -n kube-system -o wide

  

 

 

kubectl describe pod kube-flannel-ds-amd64-2mxvx  --namespace=kube-system

  

 

看日志一直在pull 鏡像 手動下載鏡像

 


免責聲明!

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



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