連接:原理及架構流程圖 介紹安裝使用(其餘1) 操做命令彙總 K8S基礎概念(其餘1) etcd概念介紹與用法 k8ss上webUI 獲取k8s鏡像 kubernetes nodes notready 解決思路 k8s學習博客 etcd的 解釋 , 功能 ,參數配置 k8s建立pod時沒有安全帳戶的報錯問題 docker+k8s基礎篇二(精煉) html
架構:node
知識點總結:web
0)k8s中的難點:算法
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節點上的一個組件, 它起的做用是一個服務代理的角色
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的安全
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"
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 ;
歷史錯誤總結: