安裝K8S過程

安裝K8S過程

1、修改下載鏡像源

  • Ubuntu 修改爲阿里雲

    cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    
  • CentOS 修改爲阿里雲

    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=0
    EOF
    

2、更新並安裝

  • 更新
    $ apt-get update 
    $ apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
    # $ apt-get install -y kubernetes-cni=0.6.0-00
    

3、下載鏡像

  • 編寫腳本
    $ touch pullk8s.sh    # 創建腳本文件
    $ nano pullk8s.sh     # 編輯腳本
    # shell 腳本內容爲
    #!/bin/sh
    for  i  in  `kubeadm config images list`;  do
        imageName=${i#k8s.gcr.io/}
        docker pull registry.aliyuncs.com/google_containers/$imageName
        docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
        docker rmi registry.aliyuncs.com/google_containers/$imageName
    done;
    
    或:建議此方法
    #!/bin/sh
    images_list=(
     k8s.gcr.io/kube-apiserver:v1.17.3
     k8s.gcr.io/kube-controller-manager:v1.17.3
     k8s.gcr.io/kube-scheduler:v1.17.3
     k8s.gcr.io/kube-proxy:v1.17.3
     k8s.gcr.io/pause:3.1
     k8s.gcr.io/etcd:3.4.3-0
     k8s.gcr.io/coredns:1.6.5
    )
    for  i  in  ${images_list[@]};  do
                imageName=${i#k8s.gcr.io/}
                docker pull registry.aliyuncs.com/google_containers/$imageName
                docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
                docker rmi registry.aliyuncs.com/google_containers/$imageName
            done;
    
    Ctrl + O #保存
    回車鍵
    Ctrl + x #退出
  • 通過腳本下載鏡像
    $ chmod +x pullk8s.sh
    $ sh pullk8s.sh
    

4、修改配置(非常重要,否則初始化時,仍然去google下載鏡像)

  • 忽略swap 錯誤
    kubernetes集羣不允許開啓swap,所以我們需要忽略這個錯誤
    編輯文件 /etc/sysconfig/kubelet,
    將文件裏的KUBELET_EXTRA_ARGS=改成:
    KUBELET_EXTRA_ARGS="–fail-swap-on=false"

5、執行初始化

  • 保持 docker service deamon 運行
    systemctl enable docker.service
    
  • 執行初始化命令(ip修改爲 0.0.0.0,否則kennel出現步驟6的錯誤
    kubeadm init --apiserver-advertise-address=當前IP --ignore-preflight-errors=NumCPU --kubernetes-version=v1.17.3
    

6、執行過程超時出錯如何處理

  • 重新執行時錯誤:

    error execution phase preflight: [preflight] Some fatal errors occurred:
    	[ERROR Port-10259]: Port 10259 is in use
    	[ERROR Port-10257]: Port 10257 is in use
    	[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
    	[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
    	[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
    	[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
    	[ERROR Port-10250]: Port 10250 is in use
    [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
    To see the stack trace of this error execute with --v=5 or higher
    
  • 處理方法:

    $ kubeadm reset
    
  • 重新運行初始化,仍然超時錯誤

    This error is likely caused by:
    - The kubelet is not running
    - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
    - 
    [kubelet-check] Initial timeout of 40s passed.
    
    Unfortunately, an error has occurred:
    	timed out waiting for the condition
    
    This error is likely caused by:
    	- The kubelet is not running
    	- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
    
    Additionally, a control plane component may have crashed or exited when started by the container runtime.
    To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.
    Here is one example how you may list all Kubernetes containers running in docker:
    - 'docker ps -a | grep kube | grep -v pause'
    Once you have found the failing container, you can inspect its logs with:
    - 'docker logs CONTAINERID'
    - error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
    
    
  • 查看日誌:
    無法連接到 apiserver

    Err :connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused". Reconnecting...
    panic: context deadline exceeded
    

    修改初始化ip爲 0.0.0.0

    kubeadm init --apiserver-advertise-address=0.0.0.0 --ignore-preflight-errors=NumCPU --kubernetes-version=v1.17.3
    

7、終於成功了

  • 初始化成功,執行後續相關操作

    Your Kubernetes control-plane 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/
    
    Then you can join any number of worker nodes by running the following on each as root: 
      省略....
    

8、查看狀態

  • 查看pods

    $ kubectl get pods --all-namespaces
    NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE
    kube-system   coredns-6955765f44-8wtsp              1/1     Running   0          32m
    kube-system   coredns-6955765f44-ksdw8              1/1     Running   0          32m
    kube-system   etcd-centos-2020                      1/1     Running   0          32m
    kube-system   kube-apiserver-centos-2020            1/1     Running   0          32m
    kube-system   kube-controller-manager-centos-2020   1/1     Running   0          32m
    kube-system   kube-proxy-v4vwz                      1/1     Running   0          32m
    kube-system   kube-scheduler-centos-2020            1/1     Running   0          32m
    
    
  • 查看健康狀態

    $ kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    scheduler            Healthy   ok                  
    controller-manager   Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}  
    
  • 查看節點

    $ kubectl get nodes
    NAME          STATUS   ROLES    AGE   VERSION
    centos        Ready    master   39m   v1.17.3
    

9、部署dashboard

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