docker && kubernetes
來自專欄遊戲服務端編程之路
docker
原理幾句話
- namespace實現隔離
- cgroup實現資源控制
- cow實現文件快速修改
基本概念
- 鏡像
- Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文 件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變數、用戶等)。鏡像 不包含任何動態數據,其內容在構建之後也不會被改變。
- 分層存儲
- 類 / 模板
- 容器
- 鏡像運行時實體
- 本質是進程。擁有自己的root文件系統、自己的網路配置、自己的進程空間,甚 至自己的用戶ID空間
- 容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一 個獨立於宿主的系統下操作一樣
- 倉庫
- Docker Registry
- 存儲,分發鏡像的服務
- Docker Registry包含多個倉庫,倉庫包含多個鏡像,不同鏡像用tag標識
安裝
- vim /etc/apt/sources.list
- add deb http://http.debian.net/debian jessie-backports main
- apt-get update
- apt-get install docker.io
指令
- docker build
- -t target
- -f 指定Dockerfile路徑
- docker
如何不用root執行docker命令
st=>start: Starte=>endcheck_group=>operation: cd /var/run && ls -alht | grep dockercond=>condition: 是否有docker groupadd_yourself_to_docker_group=>operation: gpasswd -a ${USER} dockergpasswd -a ${USER} docker,將自己加入到已有的docker group中add_docker_group=>operation: sudo groupadd docker,創建docker grouprestart_docker_service=>operation: sudo service docker restart, 重啟docker servicenewgrp=>operation: newgrp - docker,切換當前會話到新 group 或者重啟 X 會話st->check_group->condcond(yes)->add_yourself_to_docker_groupcond(no)->add_docker_groupadd_docker_group->add_yourself_to_docker_groupadd_yourself_to_docker_group->restart_docker_service->newgrp->e
Dockerfile 編寫
- 格式
# commentINSTRUCTION arguments
- ENV
- ADD
- COPY
- ENV
- EXPOSE
- FROM
- LABEL
- STOPSIGNAL
- USER
- VOLUME
- WORKDIR
docker使用關鍵點
- 用戶管理
- docker與宿主機如何文件共享
- 埠如何映射
docker源安裝
echo "deb http://apt.x.netease.com:8660/docker/repo debian-jessie main" > /etc/apt/sources.list.d/docker.listcurl http://apt.x.netease.com:8660/docker/gpg |apt-key add -apt-get update && apt-get install docker-engine
k8s
體系架構
核心組件
- etcd保存了整個集群的狀態;
- apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制;
- controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
- scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
- kubelet負責維護容器的生命周期,同時也負責Volume(CVI)和網路(CNI)的管理;
- Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
- kube-proxy負責為Service提供cluster內部的服務發現和負載均衡;
Add-ons
- kube-dns負責為整個集群提供DNS服務
- Ingress Controller為服務提供外網入口
- Heapster提供資源監控
- Dashboard提供GUI
- Federation提供跨可用區的集群
- Fluentd-elasticsearch提供集群日誌採集、存儲與查詢
自建集群無法啟動
- 源碼下載,執行hack/local-up-cluster.sh
- 無法啟動kubelet處理
- 修改grub
- 上面不行的話,嘗試
update-grub && update-grub2
網路實現
- Flannel
- Flannel是作為一個二進位文件的方式部署在每個node上,主要實現兩個功能:
- 為每個node分配subnet,容器將自動從該子網中獲取IP地址 當有node加入到網路中時,為每個node增加路由配置
- 幾個關鍵名詞
- containerPort
- nodePortnodePort是kubernetes提供給集群外部客戶訪問service入口的一種方式(另一種方式是LoadBalancer),所以,<nodeIP>:nodePort 是提供給集群外部客戶訪問service的入口。
- targetPorttargetPort是pod上的埠,從port和nodePort上到來的數據最終經過kube-proxy流入到後端pod的targetPort上進入容器。
- Portservice暴露在cluster ip上的埠,<cluster ip>:port 是提供給集群內部客戶訪問service的入口。
參考資料
https://docs.docker.com/engine/reference/builder/#from
推薦閱讀:
※跟我一起學docker(三)--鏡像的基本操作
※跟我一起學docker(一)--認識
TAG:Kubernetes | Docker | 容器雲 |