Jerry的Kubernetes学习笔记
-
是時候使用Helm了:Helm, Kubernetes的包管理工具
-
簡化Kubernetes應用部署工具-Helm安裝
-
Picking the Right Solution
-
吐槽安裝的
-
Kubernetes on Ubuntu
-
Get Docker EE for Ubuntu
useful shell script
- which kubectl
- kubectl version
- 查看ubuntu版本:cat /etc/issue
- set proxy:
export http_proxy=http://duotai:xxxxx@jerrywang.vip:24448
export https_proxy=$http_proxy
Docker設置proxy的文件: /etc/default/docker
- docker pull hello-world
- docker run hellow-world
- kubectl cluster-info
To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.
Unable to connect to the server: context deadline exceeded (Client.Timeout exceeded while awaiting headers)
- systemctl restart kube-apiserver
- kubectl get nodes
- kubectl get svc
- kubectl describe node
- kubectl get endpoints
- kubectl get svc tomcat-service -o yaml
- kubectl get namespaces --namespace=development
- systemctl daemon-reload
- systemctl enable etcd.service - 將服務加入開機啟動列表
- systemctl start etcd.service
- kubectl run nginx --image=nginx:1.12.2
- etcdctl cluster-health - 驗證etcd是否正確啟動
- kubectl describe pods
- kubectl get pods -l environment=production,tier=frontend
- kubectl get pods -l ‘environment in (production),tier in (frontend)’
- export TILLER_NAMESPACE=$(kubectl config view -o json | jq -r “.contexts[0].context.namespace”)
- get -o wide json -o=yaml
- docker ps -a
- nginx image html position: /usr/share/nginx/html
etcd, kube-controller-manager, kube-scheduler這些
Terminology
- CRI Container Runtime Interface
第一章
為什么被8080refused了呢。別著急,還沒有啟動呢,這是沒有成功連接kubernetes apiserver的節奏,一切正常,到目前為止,我們只是下載了一個可執行文件設置了權限而已。
用replicationcontroller創建pod,再創建service,暴露cluster IP. tcp訪問。
kubelet是進程,向Master注冊自己
pod的ip加上containerport,組成了endpoint,代表pod里的一個服務進程的對外通信地址。
m:千分之一個CPU配額。
Master node上的Controller Manager定期巡檢系統中存活的目標pod,確保其實例數量等于RC的期望值。
檢查Deployment狀態來看部署動作是否完成
HPA:Horizontal Pod Autoscaling - 橫向自動擴容
通過跟蹤分析RC控制的所有目標POD的負載變化來確定是否需要針對性的調整目標POD的副本數。
監控CPU使用率,當前使用量 / yaml里的pod request。
HPA本身也是一種kind:HorizontalPodAutoscaler
service就是我們說的微服務。Pod和RC其實都是為Service做鋪墊。
Service和后端pod副本集群間通過Label Selector實現無縫對接。
rc的作用:保證service的服務能力和質量始終處于預期的標準,服務之間通過TCP/IP通信。每個pod都有單獨的IP,和containerPort一起組成了end point,那組成集群后的入口是什么?負載均衡器(軟件或硬件),負責決定請求被轉發到哪個pod。每個node上都運行了kube-proxy進程,實際就是一個智能的軟件負載均衡器,負責把對service的請求轉發到后端某個pod上,并在內部實現服務的負載均衡與會話保持機制。
每個service有一個全局唯一的虛擬IP地址,cluster IP,每個服務具有唯一IP地址的通信節點。整個生命周期內不變。內部pod的endpoint會隨銷毀和重新創建而發生變化。
服務發現 - 如何通過Service name找到cluster ip?
Cluster IP是Service創建后由Kubernetes自動分配的,其他pod無法預先知道某個service的cluster IP地址。因此需要一個服務發現機制來找到這個服務。
a. Service生成一些Linux環境變量,pod啟動時注入環境變量。通過Add-On
增值包引入DNS系統,把服務名作為dns域名。通過服務名建立通信連接。
node節點的IP地址。真實存在的物理網絡,Kubernetes集群外的節點訪問集群內的節點時,必須通過node ip進行通信。
很多服務都存在多個端口,一個端口提供業務服務,另一個端口提供管理服務。
Pod IP是每個pod的ip地址,是Docker engine根據docker0網橋的IP地址段進行分配的。通常是一個虛擬的二層網絡。
一個pod里的容器訪問另一個pod里的容器,就是通過pod IP所在的虛擬二層網絡進行通信的,而真實的tcp/IP流量通過node IP所在的物理網卡流出。
Cluster IP沒有一個實體網絡對象,因此無法被ping。不具備TCP/IP通信基礎,屬于Kubernetes集群的封閉空間。
集群內部,node ip,pod IP,cluster IP之間的通信,采用的是一種特殊的路由規則,和IP路由完全不同。
使用nodeport同外界通信。
http://:
nodeport就是一個TCP監聽端口。
GCE - google cloud engine
volume在pod中的意思是能被多個Docker訪問的共享目錄。
Kubernetes中的volume與pod的生命周期相同,但與容器的生命周期無關。
給volume定義一個名字,然后mount到docker的某個目錄下。
volume類型:
emptyDir: pod分配到node時創建,初始內容為空,無須指定宿主機上對應的目錄文件,由Kubernetes自動分配一個目錄,當pod從node上移除時,emptyDir中的數據也被永久刪除。
用于臨時空間,一個容器需要從另一個容器中獲取數據的目錄。
hostPath:在pod上掛載宿主機上的文件或目錄。
- 容器應用程序生成的日志文件需要永久保存。
- 需要訪問宿主機上Docker引擎內部數據結構的容器應用,定義hostPath
為/var/lib/docker, 是容器內部應用可直接訪問Docker上的文件系統。
PV只能是網絡存儲,不屬于任何Node,但可以在每個node上訪問。PV不是定義在node上的,而是獨立于pod之外定義。
不同的分組在共享使用整個集群資源同時還能被分別管理. 默認是default。
annotation和label類似,都是key/value, 但label有嚴格的naming convention,定義的是Kubernetes對象的元數據,而且用于label selector,而annotation是用戶任意定義的附加信息,用于外部工具查找。
第二章
DNS(Domain Name System,域名系統),萬維網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行在UDP協議之上,使用端口號53
如果在DNS服務器處顯示的是個人公司的內部網絡地址,那么說明該公司的DNS解析工作是交給公司內部的DNS服務器來完成的,這時需要檢查這個DNS服務器,在DNS服務器上進行nslookup操作看是否可以正常解析
工作node上僅需部署kubelet和kube-proxy服務進程。
Master與工作node間會有大量網絡通信,在防火墻上需配置各組件需要相互通信的端口號。
etcd是Kubernetes集群的主數據庫
Kubernetes各組件與Master之間通過apiserver的非安全端口http://apiserver:8080訪問,但如果apiserver需要對外提供服務,或者集群中某些容器需要訪問apiserver以獲取集群中的某些信息,CA簽名的雙向數字證書認證。
google_containers/pause的鏡像實現pod的概念
http://gcr.io
第二章有很多命令行參數。
進度
2018-11-12 11:02AM 看到P38 1.4.6 Deployment,飛機上14:16看到42頁。
20:30, p46, 三種ip. 10:15 53 namespace 22:31第一章結束。
Docker
Docker鏡像是由多個文件系統(只讀層)疊加而成。當我們啟動一個容器的時候,Docker會加載只讀鏡像層并在其上(譯者注:鏡像棧頂部)添加一個讀寫層。如果運行中的容器修改了現有的一個已經存在的文件,那該文件將會從讀寫層下面的只讀層復制到讀寫層,該文件的只讀版本仍然存在,只是已經被讀寫層中該文件的副本所隱藏。當刪除Docker容器,并通過該鏡像重新啟動時,之前的更改將會丟失。在Docker中,只讀層及在頂部的讀寫層的組合被稱為Union File System(聯合文件系統)。
為了能夠保存(持久化)數據以及共享容器間的數據,Docker提出了Volume的概念。簡單來說,Volume就是目錄或者文件,它可以繞過默認的聯合文件系統,而以正常的文件或者目錄的形式存在于宿主機上。
learn from internet
確保pod數量:它會確保Kubernetes中有指定數量的Pod在運行。如果少于指定數量的pod,Replication Controller會創建新的,反之則會刪除掉多余的以保證Pod數量不變。
確保pod健康:當pod不健康,運行出錯或者無法提供服務時,Replication Controller也會殺死不健康的pod,重新創建新的。
彈性伸縮 :在業務高峰或者低峰期的時候,可以通過Replication Controller動態的調整pod的數量來提高資源的利用率。同時,配置相應的監控功能(Hroizontal Pod Autoscaler),會定時自動從監控平臺獲取Replication Controller關聯pod的整體資源使用情況,做到自動伸縮。
滾動升級:滾動升級為一種平滑的升級方式,通過逐步替換的策略,保證整體系統的穩定,在初始化升級的時候就可以及時發現和解決問題,避免問題不斷擴大。
see:https://www.jianshu.com/p/6bc8e0ae65d1
Docker Swarm vs Kubernetes
minikube相關
- Kubectl: Kubernetes with minikube times out
總結
以上是生活随笔為你收集整理的Jerry的Kubernetes学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gta5地下车库在哪
- 下一篇: 三星手机美版和国行什么区别(三星智能手机