K8S架構

1.K8S架構和組件

1.1 Master

  • Kubernetes API Servernode

    做爲Kubernetes系統的入口,其封裝了核心對象的增刪改查操做,以RESTful API接口方式提供給外部客戶和內部組件調用。維護的REST對象持久化到Etcd中存儲。mysql

  • Kubernetes Scheduler
    爲新創建的Pod進行節點(node)選擇(即分配機器),負責集羣的資源調度。組件抽離,能夠方便替換成其餘調度器。nginx

  • Kubernetes Controllersql

    負責執行各類控制器,目前已經提供了不少控制器來保證Kubernetes的正常運行。docker

  • Replication Controllershell

    管理維護Replication Controller,關聯Replication Controller和Pod,保證Replication Controller定義的副本數量與實際運行Pod數量一致。json

1.2 Node

  • Kubeletvim

    負責管控容器,Kubelet會從Kubernetes API Server接收Pod的建立請求,啓動和中止容器,監控容器運行狀態並彙報給Kubernetes API Server。api

  • Kubernetes Proxybash

    負責爲Pod建立代理服務,Kubernetes Proxy會從Kubernetes API Server獲取全部的Service信息,並根據Service的信息建立代理服務,實現Service到Pod的請求路由和轉發,從而實現Kubernetes層級的虛擬轉發網絡。

  • Docker

    Node上須要運行容器服務

2.K8S集羣搭建常見問題

  • 解決 kubectl get pods時No resources found問題

    一、vim /etc/kubernetes/apiserver
    二、找到」KUBE_ADMISSION_CONTROL="- admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota",去掉ServiceAccount,保存退出。
    三、systemctl restart kube-apiserver 重啓此服務

  • pull 失敗

    • 解決方案1

      一、yum install rhsm -y

      二、docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

      若是以上兩步解決問題了,那麼就不須要在執行下面操做

      三、docker search pod-infrastructure

      四、docker pull docker.io/tianyebj/pod-infrastructure

      五、docker tag tianyebj/pod-infrastructure 192.168.126.143:5000/pod-infrastructure

      六、docker push 192.168.126.143:5000/pod-infrastructure

      七、vi /etc/kubernetes/kubelet

      修改 KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.126.143:5000/pod- infrastructure:latest"

      八、重啓服務

      systemctl restart kube-apiserver
      systemctl restart kube-controller-manager
      systemctl restart kube-scheduler
      systemctl restart kubelet
      systemctl restart kube-proxy

    • 解決方案2

      一、docker pull kubernetes/pause

      二、docker tag docker.io/kubernetes/pause:latest 192.168.126.143:5000/google_containers/pause-amd64.3.0

      三、docker push 192.168.126.143:5000/google_containers/pause-amd64.3.0

      四、vi /etc/kubernetes/kubelet配置爲

      ​ KUBELET_ARGS="--pod_infra_container_image=192.168.126.143:5000/google_containers/pause-amd64.3.0"

      五、重啓kubelet服務 systemctl restart kubelet

    私有倉庫搭建
    docker pull registry
    docker run -di --name=registry -p 5000:5000 registry
    修改daemon.json {"insecure-registries":["192.168.126.148:5000"]}
    重啓docker服務 systemctl restart docker

3.經常使用命令

  • 獲取當前命名空間下的容器

    kubectl get pods

  • 獲取全部容器l列表

    kubectl get all

  • 建立 容器

    kubectl create -f kubernate-pvc.yaml

  • 刪除容器

    kubectl delete pods/test-pd 或者 kubectl delete -f rc-nginx.yaml

  • 查看指定pod跑在哪一個node上

    kubectl get pod /test-pd -o wide

  • 查看容器日誌

    Kubectl logs nginx-8586cf59-mwwtc

  • 進入容器終端命令

    kubectl exec -it nginx-8586cf59-mwwtc /bin/bash

  • 一個Pod裏含有多個容器 用--container or -c 參數。

    例如:假如這裏有個Pod名爲my-pod,這個Pod有兩個容器,分別名爲main-app 和 helper-app,下面的命令將打開到main-app的shell的容器裏。

    kubectl exec -it my-pod --container main-app -- /bin/bash

  • 容器詳情列表

    kubectl describe pod/mysql- m8rbl

  • 查看容器狀態

    kubectl get svc

相關文章
相關標籤/搜索