【微服務】容器化之Docker & Kubernetes

1.容器生態

容器技術的生態系統自下而上分別覆蓋了IaaS層和PaaS層所涉及的各類問題,包括資源調度編排部署監控配置管理、存儲網絡管理、安全、容器化應用支撐平臺等。如下圖,其中dockerk8sconsuletcd等都是此處需要關注的。

docker主要是輕量級容器引擎,起到容器(運行着服務)間隔離的作用,可以充分利用機器資源,自動化部署。

Kubernetes(k8s)主要用於管理容器集羣,

1.1優勢

  1. 持續部署與測試
  2. 跨雲平臺支持
  3. 環境標準化和版本控制

2.Docker使用

2.1 三大核心概念

Image鏡像  
Container容器 輕量級虛擬機
Docker registry鏡像倉庫 類似與github等代碼倉庫,官方倉庫https://hub.docker.com/

2.2 關聯關係

常用流程就是

1.編寫dockerfile,build生成一個鏡像,將鏡像push到倉庫 

2.從倉庫pull拉取一個鏡像,run創建一個容器並運行

像上面的流程一樣,3者直接通過docker命令可以交互

2.2.1 命令

分類

命令

容器生命週期管理

run、start/stop/restart、kill、rm、pause/unpause、create、exec

容器操作

ps、inspect、top、attach、events、logs、wait、export、port

容器rootfs命令

commit、cp、diff

鏡像倉庫

login、pull、push、search

本地鏡像管理

images、rmi、tag、build、history、save、load、import

docker環境

info、version

類別

常用子命令

樣例&功能

環境

 

docker info

 

Docker環境信息

Containers

Images

...

docker version

 

Client\Server:

 Version:           18.06.1-ce

 API version:       1.38

 Go version:        go1.10.3

 Git commit:        e68fc7a

 Built:             Tue Aug 21 17:23:18 2018

 OS/Arch:           linux/amd64

 Experimental:      false

容器啓動、關閉

docker run

 

基於特定的鏡像創建一個容器,並依據選項來控制該容器運行

docker run --name=mysqltest -d -p 3306:3306 mysql/mysql-server:5.7

該命令從mysql-server:5.7鏡像啓動一個容器,並執行echo命令

--name指定容器名字

-d 後臺執行

-p 容器服務端口到主機端口映射 hostPort:container-Port

 

docker start/stop/restart

對於已經存在的容器,可以通過dockerstart/stop/restart命令來啓動、停止和重啓

docker rm

刪除容器

鏡像倉庫

 

 

docker pull

從Docker registry中拉取image或repository

docker pull mysql/mysql-server:5.7 從mysql倉庫拉取tag是5.7的mysql-server鏡像

docker push

將本地的image或repository推送到DockerHub的公共或私有鏡像庫

 

鏡像管理

 

docker images

可以列出主機上的鏡像

docker build

Dockerfile和docker build命令來完成一個新鏡像的構建

docker commit

提交容器對鏡像的修改

docker save

保存鏡像

docker rmi

刪除鏡像

容器運維

docker ps

查看容器的相關信息,默認只顯示正在運行的容器的信息

3.Kubernetes

3.1 集羣架構

用戶通過api發送指令給master,master發信號給Node

master和node的組件如下:

3.1 核心概念

節點 組件 功能
master API Server

對外接口

用戶操作的接口

Scheduler

資源調度

預定的調度策略將Pod調度到相應的機器上(Model)

Controller manager

管理控制器

負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等

etcd 用以保存了整個集羣的狀態
Node Pod

部署、水平擴展和製作副本的最小單元。

可以有多個容器Container(Docker 容器)

Pod內的所有容器共享存儲和網絡。

Kubelet 負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理
kube-proxy

負責爲服務Service提供cluster內部的服務發現和負載均衡

監聽 API server 中 service 和 endpoint 的變化情況

3.2 開放接口

命令 功能
kubectl create -f xxx.yaml 創建資源對象
kubectl get nodes 查看node
kubectl get pods -n <namespace> -o wide 查看pods
kubectl describe 描述資源,如node、pod
kubectl delete 刪除資源,如node、pod

kubectl exec <pod-name> date

kubectl exec -it <pod-name> -c <container-name> /bin/bash

執行pod第一個容器的date命令

執行指定pod、指定容器的bash命令

kubectl logs -f <pod-name> -c <container-name>  查看日誌(相當於tail -f 命令)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章