1. 程式人生 > >kubernetes+docker+dashboard安裝部署詳細步驟

kubernetes+docker+dashboard安裝部署詳細步驟

fire col owin selinux 打通 dct des 主機名 -c

對docker和kubernetes都不熟悉,搜了很多指導,在kubernetes集群中安裝dashboard的時候總是會遇到各種問題,花了兩天時間試了很多方法,終於安裝成功,主體步驟來自https://blog.csdn.net/chenyufeng1991/article/details/79251498,補全安裝過程中遇到的問題及解決方法。 實驗環境: 1.OS:Centos7.5 每個操作系統設置一個主機IP 2.使用的軟件包 master:docker/kubernetes-master/etcd/flannel nodes:docker/kubernetes-node/flannel 3.軟件包說明 kubernetes-master:Kubernetes服務端 kubernetes-node:Kubernetes客戶端 etcd:服務發現的鍵值存儲(可以理解為中間件,flannel服務通過它記錄分配給各pod的地址段,每次分配前會在etcd中查詢,從而不會重復分配) flannel:打通多臺服務器上的docker容器之間的網路互通 前提條件: 1.master和node修改SELINUX配置文件,SELINUX=disabled,重啟操作系統 2.master和node執行systemctl stop firewalld和systemctl disable firewalld關閉防火墻,有安全需求的,可以根據需要啟動防火墻,放開相應端口 3.master和node修改主機名,可以使用hostnamectl命令直接修改,也可以修改/etc/hostname文件,將主機名與IP地址對應關系寫入/etc/hosts文件 4.開啟路由轉發功能,在master和node的/etc/sysctl.conf中添加net.ipv4.ip_forward = 1 執行sysctl -p執行該文件 安裝步驟: 1.master安裝配置 yum install -y kubernetes-master etcd flannel docker 此處如果有低版本kubectl等工具會報錯,使用rpm -e卸載所有依賴,再次執行此命令即可 etcd安裝完成後配置 vi /etc/etcd/etcd.conf ETCD_LISTEN_CLIENT_URLS="http://localhost:2379" ###此處localhost修改為0.0.0.0 ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379" ###此處localhost修改為主機IP地址,如果多個etcd構成集群,直接在後面加url 完成以後配置後,啟動etcd,加入自啟動 systemctl start etcd systemctl enable etcd 配置Kubernetes,進入/etc/kubernetes目錄: vi apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" ###apiserver服務綁定的地址(個人理解為apiserver監聽地址) KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.149.134:2379" ###url裏面的IP地址修改為etcd配置文件中設置的主機IP地址 KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=172.17.0.0/16" ###Kubernetes可以分配的IP範圍,Kubernetes啟動的每一個pod以及service都會分配一個IP地址,將會從這個範圍分配。是Services管理的集群IP地址範圍。後面etcd設置存儲地址段的目錄時,要與該地址段保持一致。 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" ###是因為安裝kubernetes而修改的配置 vi config KUBE_MASTER="--master=http://192.168.149.134:8080" ###此處url中的IP地址修改為master主機IP地址 2.node配置 yum install -y kubernetes-node flannel docker 配置kubernetes,進入/etc/kubernetes目錄: vi config KUBE_MASTER="--master=http://192.168.149.134:8080" ###此處url中的IP地址修改為master主機IP地址 vi kubelet KUBELET_ADDRESS="--address=0.0.0.0" ###kubelet啟動後綁定的地址 KUBELET_HOSTNAME="--hostname-override=node" ###此處為master執行get nodes時顯示的名稱,填可以解析的主機名或者IP地址,不能隨意起 KUBELET_API_SERVER="--api-servers=http://192.168.149.134:8080" ###此處IP地址為master的主機IP地址 3.配置flannel,master及node節點上flannel的配置都要一樣 master及node節點,進入/etc/sysconfig目錄 vi flanneld FLANNEL_ETCD_ENDPOINTS="http://http://192.168.149.134:2379" ###此處IP地址為etcd配置文件中設置的主機IP地址 FLANNEL_ETCD_PREFIX="/kube/network" ###下面etcd執行命令時使用該目錄 然後在master節點上執行以下命令: etcdctl mkdir /kube/network etcdctl mk /kube/network/config ‘{"Network":"172.17.0.0/16"}‘ ###此處網段要與前面apiserver裏面配置的參數一致 4.分別在master、nodes上啟動docker、etcd、flanneld並加入自啟動 master: systemctl start docker etcd flanneld systemctl enable docker etcd flanneld node: systemctl start docker flanneld systemctl enable docker flanneld 5.啟動服務 啟動master上的k8s服務,先啟動apiserver systemctl start kube-apiserver kube-controller-manager kube-scheduler systemctl enable kube-apiserver kube-controller-manager kube-scheduler 啟動nodes上的k8s服務 systemctl start kube-proxy kubelet systemctl enable kube-proxy kubelet 6.驗證 訪問http://kube-apiserver:port http://192.168.149.134:8080/ 查看所有請求url。

技術分享圖片

http://192.168.149.134:8080/healthz/ping 查看健康狀況。

         在master上查看一些服務是否成功開啟

         獲取k8s客戶端
         kubectl get nodes  ###可以獲取到node
         獲取k8s命名空間  
         kubectl get namespace ###要有kube-system

         7.開始安裝dashboard(坑比較多的地方)
         master開始創建dashboard ui,在該步驟之前要先有kube-system命名空間
         在master上拉取以下代碼:wget http://docs.minunix.com/docker/kubernetes-dashboard.yaml   ###wget下載不下來可以用curl -O 這個url下載下來,將裏面的- --apiserver-host=http://192.168.149.134:8080  IP地址替換成自己的master主機IP地址,通過master的apiserver來訪問運行在node容器中的dashboard

如果下載不下來,可以直接創建kubernetes-dashboard.yaml文件,將下面內容復制到該文件中保存即可

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: kubernetes-dashboard
    version: v1.1.1
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
    spec:
      containers:
      - name: kubernetes-dashboard
        image: daocloud.io/minunix/kubernetes-dashboard-amd64:v1.1.1
        imagePullPolicy: Always
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          # Uncomment the following line to manually specify Kubernetes API server Host
          # If not specified, Dashboard will attempt to auto discover the API server and connect
          # to it. Uncomment only if the default does not work.
        - --apiserver-host=http://192.168.3.7:8080  ## 請修改為自己的kebu-apiserver
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard
    如果要通過node的IP地址直接訪問dashboard,需要在ports裏面添加nodeport
    最後的ports部分替換為:
spec:

type: NodePort
ports:

  • port: 80
    targetPort: 9090
    nodePort: 30090 ###該端口自己定義,有取值範圍
    selector:
    app: kubernetes-dashboard

    根據以上yaml創建pods:

    kubectl create -f kubernetes-dashboard.yaml

    如果報錯,根據提示信息進行處理,如果修改yaml後重新執行上面命令提示已存在,可以執行以下刪除命令後再執行創建命令

    kubectl delete -f kubernetes-dashboard.yaml

    8.查看是否創建成功:

    kubectl get pods --namespace=kube-system ###--namespace是指定在哪個命名空間中的pod,不加的話在default中查找

    容器status不為running說明容器狀態不正常
    
    使用kubectl describe pods kubernetes-dashboard-2496492025-rwczb --namespace=kube-system命令查看這個容器創建過程中出現的問題,kubernetes-dashboard-2496492025-rwczb是上面命令查詢結果中pod的名稱
    
    根據提示信息發現是鏡像拉取失敗,細節是找不到文件或者文件夾,查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt  是一個軟鏈接,但是鏈接過去後並沒有真實的/etc/rhsm,進行如下操作:
    1).yum安裝
       yum install *rhsm*
         安裝完成後查看上面的軟連接是否有真實的連接文件,如果有,問題解決,手動拉取鏡像文件
     docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 
    
    2).如果上面的方法無法解決軟連接問題,執行下面步驟
     curl -O  http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
    
         執行以下命令
     rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
    
         然後再執行docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 手動拉取鏡像
         再次執行get pods命令,查看pod狀態,發現status變為running,說明應用已正常運行。
    
        9.訪問dashboard
    
        可以通過三種方式訪問dashboard
        1).kubernetes-dashboard 服務暴露了 NodePort,可以使用 http://NodeIP:nodePort 地址訪問 dashboard;

    2).通過 kube-apiserver 訪問 dashboard,使用http://masterip:8080 地址訪問
    3).通過 kubectl proxy 訪問 dashboard:

        10.常用日誌查看命令:
        journalctl -xue | kubelet 根據輸出解決安裝的問題

    kubectl describe pods <podName> -n=kube-system 查看內部pod啟動錯誤的原因
    kubectl logs -f pods <podName> -n=kube-system 查看容器內部的日誌

kubernetes+docker+dashboard安裝部署詳細步驟