閱讀668 返回首頁    go 阿裏雲 go 技術社區[雲棲]


給大家kubernetes核心技術詳解之一

好長時間沒寫文章了,昨天剛倒黴一天,今天寫篇文章安慰的自己,廢話不多說直接看題。

 

kubernetes核心技術詳解
概述
模塊化,可插拔化
公有雲,私有雲,混合雲部署
可掛載
可組合
自動恢複
自動複製
自動重啟
使用
使用命令 kubectl 進行交互
kubectl  create -f    name.yaml 創建pod
kubectl   get  pods   查看創建的pods
READY是1 表明是成功的服務正常
kubectl   delete  pods  nameserver   刪除創建的的pods
kubectl   get  pods     nginx -o yaml       以yaml形式查看創建的服務的pods
Pods
創建,調度以及管理的最小單元
共存的一組容器的集合
容器共享PID,網絡,IPC以及UTS的命名空間
容器共享存儲卷
短暫存在
Volumes
解決數據卷持久化
Pad中容器共享數據
生命周期和定義pods生命周期一樣的
支持多種類型的數據卷
emptyDir 本地創建數據卷其初始是一個空文件夾可以讀寫
hostpatch 本機自定義數據卷,映射存儲路徑進行存儲
gcePersistentDisk 雲端
awkElasticBlockStore 雲存儲
nfs 網絡磁盤
iscsi 網絡磁盤
gluserfs 網絡磁盤
secrets 用來保存一些敏感的數據,一般用來保存用戶加密的密碼
labels
用以標示對象(如Pod)的key/value對
組織並選擇對象的子集
範例
kubectl  create -f    labels.yaml
格式  labels:
app: nginx
kubectl  get   pods   -l  app=nginx 查看對應的lables值
Replication Controllers
當某個節點出現故障,如何確保新的節點進行替補
確保在任意時刻運行指定的數據的Pod
容器重新調度
規模調整簡單
在線升級
多個版本的跟蹤
特別的注意️:使用新版本的RC和舊版本的RC需要至少有一處不同的labels以標記版本的Pods
範例如下
kubectl    create  -f  rc.yaml 創建一個rc
apiVersion: v1     版本是v1
kind: ReplicationController  對象是rc
metadata:
name: my-nginx  命名是 my-nginx
spec:
replicas: 2       定義任何時刻確保有2個nginx運行
template:        運行時pods的定義
metadata:
labels:
app: nginx
spec:              定義container一樣
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
kubectl    get  rc 查看創建的rc
kubectl    get  pods  -l  app=nginx  查看lables的數目
Services
抽象一係列Pod並定義其訪問規則
固定IP地址和DNS域名
通過環境變量和DNS發現服務
負載均衡
外部服務訪問方式
ClusterIP 當前的集群內訪問
NodePort 在集群內暴露某一個端口,通過集群的某一工作節點IP和端口來訪問這個服務
LoadBalancer 雲服務商提供外部負載均衡可以使用這種類型
範例:
kubectl    create  -f  services.yaml 創建一個service.yaml
apiVersion: v1     版本是v1
kind: Service 對象是Service 類型
metadata:
name: nginx-service  命名是 nginx-service
spec:
ports:  定義端口
- containerPort: 8000 內網
targetPort:80  映射外網端口80
Protocol:tcp
Selector:   定義選擇器為那些pod提供服務
app:nginx
kubectl    get  services   查看創建的services
Names
Namespaces
Annotations
實戰部署
數據持久化  volumes
保密數據管理  secrets
kubectl    create  -f  secrets.yaml 創建一個secrets.yaml
apiVersion: v1     版本是v1
kind: Secret 對象是Secret 類型
metadata:
name: mySecret 命名是 mySecret
type: Opaque—表式是隨機用戶數據—
date:
Password:      sdfsdfsdfsdfsddfok
Username:     sdfsdfsdfsdfsddfok
kubectl    get  secret 查看創建 my  secret
資源管理  resources
健康檢測  liveness/readinessprobes
生命周期鉤子函數和退出警告
組織資源配置
kubectl批量處理
有效的利用label
在線應用升級以及回退
實時更新資源
kubectl   describe   pod  查看某個節點狀態
kubectl   logs   pod  《container》 查看某個節點日誌狀態
kubectl   exec  container  command  查看某個節點執行命令
核心模塊
master上的模塊
etcd模塊
高可用的key/Value存儲
隻有apiserver有讀寫權限
使用etcd集群確保數據可靠性
apiserver模塊
作為kubernetes的係統入口,REST 提供增,減,改,查等
認證
授權
hosts.deny
hosts.allow
訪問控製
服務賬號
資源限製
kube-controller-manager執行各種控製器模塊
Replication Controller 確保定義的複製數量和實際運行數量的總和是一致的。
Endpoint      Controller定期關聯server和pod關聯信息保證server關聯到pods總是最新的
Namespace    Controller 控製命名空間
Serviceaccount    Controller 控製服務賬號
kube-scheduler資源調度模塊
資源需求
服務需求
硬件/軟件/策略限製
關聯性和非關聯性
數據本地化
work上的模塊
kubele 管理控製dockert模塊
節點管理器
確保調度到本節點的Pod的運行和健康
kube-proxy代理模塊
Pod網絡代理
tcp/udp 請求轉發
負載均衡(Round Robin插件形式存在的)
服務發現
環境變量
DNS-kube2sky,etcd,skydns  DNS查詢
每周五定期分享docker 相關核心技術
dockercore
網絡
容器間的通信
節點和容器間互相通信
每個Pod使用一個全劇唯一的IP
高可用
kubelet保證每一個master節點的
服務正常運行
係統監控程序確保kubelet正常運行
Etcd 集群

Master選舉確保kube-scheduler和kube-contrller-manager高可用

679945b53c8803436dbb332315129800ace96095


最後更新:2017-04-14 17:30:21

  上一篇:go 雲棲TechDay開放日---我的活動我做主
  下一篇:go 4月14日雲棲精選夜讀:EDAS-如何快速定位OOM問題【雲享團】