Kubernetes

連接:原理及架構流程圖 介紹安裝使用其餘1)    操做命令彙總      K8S基礎概念其餘1)  etcd概念介紹與用法  k8ss上webUI    獲取k8s鏡像   kubernetes nodes notready 解決思路   k8s學習博客   etcd的 解釋 ,  功能  ,參數配置        k8s建立pod時沒有安全帳戶的報錯問題   docker+k8s基礎篇二(精煉) html

架構:node

       

 

知識點總結:web

0)k8s中的難點:算法

  • Service的概念     
  • Fluentd(網絡組建,主要用於鏈接分配pod網絡端口),etcd (主要負責資源調度,好比Fluentd鏈接到etcd上便於集權對nodes中各pods的網絡IP分配資源調度存儲等) 

K8S各組件解釋: docker

 

  etcd: 高可用存儲共享配置和服務發現,做爲與minion機器上的flannel配套使用,做用是使每臺 minion上運行的docker擁有不一樣的ip段,最終目的是使不一樣minion上正在運行的docker containner都有一個與別的任意一個containner(別的minion上運行的docker containner)不同的IP地址。
  flannel: 網絡結構支持
  kube-apiserver: 不論經過kubectl仍是使用remote api 直接控制,都要通過apiserver
  kube-controller-manager: 對replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循環控制,與kube-apiserver交互,保證這些controller工做
  kube-scheduler: Kubernetes scheduler的做用就是根據特定的調度算法將pod調度到指定的工做節點(minion)上,這一過程也叫綁定(bind)
  kubelet: Kubelet運行在Kubernetes Minion Node上. 它是container agent的邏輯繼任者
  kube-proxy: kube-proxy是kubernetes 裏運行在minion節點上的一個組件, 它起的做用是一個服務代理的角色
View Code

 

1) k8s的好處在哪裏(相比較只使用docker)    k8s和Docker關係簡單說明vim

1、故障遷移:當某一個node節點關機或掛掉後,node節點上的服務會自動轉移到另外一個node節點上,這個過程全部服務不中斷。這是docker或普通雲主機是不能作到的;
2、資源調度:當node節點上的cpu、內存不夠用的時候,能夠擴充node節點,新建的pod就會被kube-schedule調度到新擴充的node節點上;
3、資源隔離:建立開發、運維、測試三個命名空間,切換上下文後,開發人員就只能看到開發命名空間的全部pod,看不到運維命名空間的pod,這樣就不會形成影響,互不干擾。傳統的主機或只有docker環境中,登陸進去就會看到全部的服務或者容器;
4、由於採用docker容器,進程之間互不影響;
5、安全:不一樣角色有不一樣的權限,查看pod、刪除pod等操做;RBAC認證增長了k8s的安全
View Code

2) 若是須要外部能夠訪問,先curl http://localhost:8080 再curl http://【IP】:8080  再關閉防火牆,還須要修改,若是能夠訪問則api

3) kubernetes實際上是一個高度自動化的資源控制系統,經過跟蹤對比etcd庫裏保存的「資源指望狀態」與當前環境中的「實際資源狀態」的差別來實現自動控制和自動糾錯的高級功能。安全

4)容器能夠爲應用提供隔離的環境,在這個環境裏應用就能運行起來。可是這些相互隔離的容器須要管理,也須要跟外面的世界溝通。共享的文件系統、網絡、調度、負載均衡和資源分配等都是挑戰。Kubernetes就能夠管理這些容器。網絡

5) docker經過進程隔離,k8s經過namespace隔離。架構

6) node上必須啓動flanneld才能載入集羣中!!

7)  k8s上的pod是運行在容器上的,刪除k8s並不能刪除pod上的內容,這也是爲何運行pod必需要容器的理由。

8) k8s相關配置文件運用與解釋:  

/etc/kubernetes/config:  (master、node必須) 
/etc/etcd/etcd.conf:(master必須)
/etc/kubernetes/apiserver : (master必須) 
/etc/kubernetes/controller-manager: (master必須) 
/etc/kubernetes/scheduler : (master必須) 
/etc/kubernetes/kubelet、(node必須)
/etc/sysconfig/flanneld (node必須)
/etc/kubernetes/proxy  (node必須)

master生效的修改方式:
---使master能被其餘機器發現須要以下配置(在/etc/kubernetes/apiserver中):
echo 'KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"' >> /etc/kubernetes/apiserver;
systemctl 且  stop firewalld;

node生效的修改方式:
1)/etc/kubernetes/config 中 KUBE_MASTER="--master=http://master的IP:8080" 爲指定master所在的地址
2)vim /etc/kubernetes/kubelet 中KUBELET_HOSTNAME="--hostname-override=node的名字" 和KUBELET_API_SERVER="--api-servers=http://master的IP:8080"
修改完成後,重啓node(proxy和kubelet)可在master中看到能生效的node。
3) 修改/etc/sysconfig/flanneld 中FLANNEL_ETCD_ENDPOINTS="http://ETCD的IP:2379"
View Code

9)針對自寫腳本完成k8s上mater和node的安裝複製粘貼(假定全部腳本已經在當前目錄下):

 Master  重建: renew_k8s_master.sh     (重建須要修改的配置文件: echo 'KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"' >> /etc/kubernetes/apiserver;)

Node 重建:須要修改的配置文件: 

./remove_k8s_all.sh ;   ./install_k8s_node.sh ; 
sed -i s/127.0.0.1:8080/{MasterIP}:8080/g /etc/kubernetes/config ;
sed -i s/hostname-override=127.0.0.1/hostname-override={NodeName}/g /etc/kubernetes/kubelet ;
sed -i s/127.0.0.1:8080/{MasterIP}:8080/g /etc/kubernetes/kubelet ;
sed -i s/127.0.0.1:8080/{MasterIP}:8080/g /etc/sysconfig/flanneld ;

 

歷史錯誤總結:

  •   若是出現:kubectl error: The connection to the server localhost:8080 was refused  多是/etc/kubernetes/apiserver 中  KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"  沒有設置正確。 表示任何地址可訪問。
  •   停滯在k8s的node狀態NotReady,且沒法查看master狀態是,是因爲:node上代理沒有啓動:systemctl start kubelet kube-proxy    
  • Mater必須有如下組建:apiserver,scheduler,controller-manager,etcd,flannel;  在Node必須有:flannel, docker, kubelet, kube-proxy ,要想將其餘機器的nodes加入mater須要在/etc/kubernetes目錄下配置kubelet,proxy和config文件,以鏈接master。
  • 疑問:不刪除node,用kubectl顯示note中的notReady哪來的? (緣由:只要master曾經載入過這個node,即便這個node關機不存在,中經過kubetctl get nodes任然能顯示這個node爲notReady狀態,經過kubectl describe nodes能夠看到詳細的信息)
相關文章
相關標籤/搜索