1. 程式人生 > 其它 >部署一套完整的K8s叢集

部署一套完整的K8s叢集

一、Docker 概述

1.1 Docker 初識

Docker是一個開源的應用容器引擎,基於go語言開發並遵循了apache2.0協議開源。
Docker是在Linux容器裡執行應用的開源工具,是一種輕量級的“虛擬機器”。
Docker 的容器技術可以在一臺主機上輕鬆為任何應用建立一個輕量級的、可移植的、自給自足的容器。
Docker的Logo設計為藍色鯨魚,拖著許多集裝箱。
鯨魚可看作為宿主機,集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應用程式。

Docker的設計宗旨:Build,Ship and Run Any App,Anywhere
即通過對應用元件的封裝、釋出、部署、執行等生命週期的管理,達到應用元件級別的“一次封裝,到處執行”的目的。這裡的元件,既可以是一個應用,也可以是一套服務,甚至是一個完整的作業系統。

1.2 容器的特點

容器化越來越受歡迎,因為容器是:

靈活:即使是最複雜的應用也可以集裝箱化。
輕量級:容器利用並共享主機核心。
可互換:可以即時部署更新和升級。
行動式:可以在本地構建,部署到雲,並在任何地方執行。
可擴充套件:可以增加並自動分發容器副本。
可堆疊:可以垂直和即時堆疊服務。

1.3 容器和Docker與虛擬機器的區別

1.3.1 容器與虛擬機器的區別

1)容器
是在linux上本機執行,並與其他容器共享主機的核心,它執行的是一個獨立的程序,不佔用其他任何可執行檔案的記憶體,非常輕量。
2)虛擬機器
執行的是一個完成的作業系統,通過虛擬機器管理程式對主機資源進行虛擬訪問,相比之下需要的資源更多。

1.3.2 Docker與虛擬機器的區別



1.3.3 容器在核心中支援2種重要技術

docker本質就是宿主機的一個程序,docker是通過namespace實現資源隔離,通過cgroup實現資源限制,通過寫時複製技術(copy-on-write)實現了高效的檔案操作(類似虛擬機器的磁碟比如分配500g並不是實際佔用物理磁碟500g)。

1.4 Docker核心概念

1)映象
Docker的映象是建立容器的基礎,類似虛擬機器的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。
通過映象啟動一個容器,一個映象是一個可執行的包,其中包括執行應用程式所需要的所有內容包含程式碼,執行時間,庫、環境變數、和配置檔案。
2)容器
Docker的容器是從映象建立的執行例項,它可以被啟動、停止和刪除。所建立的每一個容器都是相互隔離、互不可見,以保證平臺的安全性。
可以把容器看做是要給簡易版的linux環境(包括root使用者許可權、映象空間、使用者空間和網路空間等)和執行在其中的應用程式。
3)倉庫
Docker倉庫是用來集中儲存映象的地方,當建立了自己的映象之後,可以使用push命令將它上傳到公有倉庫(Public)或者私有倉庫(Private)。當下次要在另外一臺機器上使用這個映象時,只需從倉庫獲取。

Docker 的映象、容器、日誌等內容全部都預設儲存在 /var/lib/docker 目錄下。

二、Docker的安裝

2.1 docker的安裝步驟

1. 目前 Docker 只能支援 64 位系統。

2. systemctl stop firewalld.service
3. setenforce 0

4. #安裝依賴包
5. yum install -y yum-utils device-mapper-persistent-data lvm2
6. --------------------------------------------------------------------------------------------
7. yum-utils:提供了 yum-config-manager 工具。
8. device mapper: 是Linux核心中支援邏輯卷管理的通用裝置對映機制,
9. 它為實現用於儲存資源管理的塊裝置驅動提供了一個高度模組化的核心架構。
10. device mapper儲存驅動程式需要 device-mapper-persistent-data 和 lvm2。
11. --------------------------------------------------------------------------------------------

12. #設定阿里雲映象源
13 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

14. #安裝 Docker-CE並設定為開機自動啟動
15. yum install -y docker-ce

16. systemctl start docker.service
17. systemctl enable docker.service

18. #檢視 docker 版本資訊
19. docker version

2.2 docker的具體實驗操作步驟

1.關閉防火牆和SElinux

2.恢復yum官方源,然後按照依賴程式

3.設定阿里雲映象源後安裝 Docker-CE

4.Docker-CE設定為開機自動啟動

三、Docker的映象操作

3.1 搜尋映象

格式:docker search 關鍵字
docker search nginx
示例:

3.2 獲取映象

1. 格式:docker pull 倉庫名稱[:標籤]

2. #如果下載映象時不指定標籤,則預設會下載倉庫中最新版本的映象,即選擇標籤為 latest 標籤。

3. docker pull nginx

示例:

3.3 映象加速下載

1. 瀏覽器訪問 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取映象加速器配置

2. mkdir -p /etc/docker
3. tee /etc/docker/daemon.json <<-'EOF'
4. {
5. "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
6. }
7. EOF
8. systemctl daemon-reload
9. systemctl restart docker
示例:
① 登入阿里雲獲取映象加速地址並複製。

② 在虛擬機器上執行命令

docker info檢視是否啟用加速

3.4 檢視映象資訊

1. 映象下載後存放在 /var/lib/docker

2. #檢視下載的映象檔案資訊
3. cat /var/lib/docker/image/overlay2/repositories.json

4. #檢視下載到本地的所有映象
5. docker images


6. REPOSITORY TAG IMAGE ID CREATED SIZE
7. nginx latest ae2feff98a0c 9 days ago 133MB
8. --------------------------------------------------------------------------------------------
9. REPOSITORY:映象屬於的倉庫;
10. TAG:映象的標籤資訊,標記同一個倉庫中的不同映象;
11. IMAGE ID:映象的唯一ID 號,唯一標識一個映象;
12. CREATED:映象建立時間;
13. VIRTUAL SIZE:映象大小;
14. --------------------------------------------------------------------------------------------

15. #根據映象的唯一標識 ID 號,獲取映象詳細資訊
16. 格式:docker inspect 映象ID號
17. docker inspect ae2feff98a0c

18. ————————————————

示例:

3.5 為本地的映象新增新的標籤

1. 格式:docker tag 名稱:[標籤] 新名稱:[新標籤]

2. docker tag nginx:latest nginx:web

3. docker images | grep nginx

3.6 刪除映象

1. 格式:
2. docker rmi 倉庫名稱:標籤 #當一個映象有多個標籤時,只是刪除其中指定的標籤
3. 或者
4. docker rmi 映象ID號 #會徹底刪除該映象

5. 注意:如果該映象已經被容器使用,正確的做法是先刪除依賴該映象的所有容器,再去刪除映象。普通刪除無法刪除時,可以加-f選項強制刪除。

6. docker rmi nginx:web

例項:

3.7 存出鏡像:將映象儲存成為本地檔案

1. 格式:docker save -o 儲存檔名 儲存的映象

2. docker save -o nginx nginx:latest #存出鏡像命名為nginx存在當前目錄下

3. ls -lh

示例:

3.8載入映象:將映象檔案匯入到映象庫中

1. 格式: docker load < 存出的檔案

2. 或者 docker load -i 存出的檔案

3. docker load < nginx

示例:

3.8 上傳映象

1. 預設上傳到 docker Hub 官方公共倉庫,需要註冊使用公共倉庫的賬號。
2. 可以使用 docker login 命令來輸入使用者名稱、密碼和郵箱來完成註冊和登入。
3. 在上傳映象之前,還需要先對本地映象新增新的標籤,然後再使用 docker push 命令進行上傳。

4. docker tag nginx:latest nginx:web #新增新的標籤
5. docker login #登入公共倉庫
6. Username:
7. password:
8. docker push wl/nginx:web #上傳映象

四、Docker 容器操作

4.1 容器建立:就是將映象載入到容器的過程。

1. 新建立的容器預設處於停止狀態,不執行任何程式,需要在其中發起一個程序來啟動容器。

2. 格式:docker create [選項] 映象
3. 常用選項:
4. -i:讓容器的輸入保持開啟
5. -t:讓 Docker 分配一個偽終端

6. docker create -it nginx:latest /bin/bash

示例:

4.2 檢視容器的執行狀態

1. docker ps -a #-a 選項可以顯示所有的容器
2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3. 8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson

4. 容器的ID號 載入的映象 執行的程式 建立時間 當前的狀態 埠對映 名稱

4.3 啟動容器

1. 格式:docker start 容器的ID/名稱

2. docker start 8b0a7be0ff58

3. docker ps -a

示例:

4.4 建立並啟動容器

1. 可以直接執行 docker run 命令, 等同於先執行 docker create 命令,再執行 docker start 命令。
2. 注意:容器是一個與其中執行的 shell 命令共存亡的終端,命令執行容器執行, 命令結束容器退出。

3. 當利用 docker run 來建立容器時, Docker 在後臺的標準執行過程是:
4. (1)檢查本地是否存在指定的映象。當映象不存在時,會從公有倉庫下載;
5. (2)利用映象建立並啟動一個容器;
6. (3)分配一個檔案系統給容器,在只讀的映象層外面掛載一層可讀寫層;
7. (4)從宿主主機配置的網橋介面中橋接一個虛擬機器介面到容器中;
8. (5)分配一個地址池中的 IP 地址給容器;
9. (6)執行使用者指定的應用程式,執行完畢後容器被終止執行。

10. docker run centos:7 /usr/bin/bash -c ls /
11. docker ps -a #會發現建立了一個新容器並啟動執行一條 shell 命令,之後就停止了
示例:

4.5 在後臺持續執行 docker run 建立的容器

1. 需要在 docker run 命令之後新增 -d 選項讓 Docker 容器以守護形式在後臺執行。並且容器所執行的程式不能結束。

2. docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"

3. docker ps -a #可以看出容器始終處於 UP,執行狀態
4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5. 2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet

6. docker run -itd --name test1 centos:7 /bin/bash
實示例:

4.6 終止容器執行

1. 格式:docker stop 容器的ID/名稱
2. docker stop 2592d3fad0fb

3. docker ps -a
示例:

4.7 容器的進入

1. 需要進入容器進行命令操作時,可以使用 docker exec 命令進入執行著的容器。

2. 格式:docker exec -it 容器ID/名稱 /bin/bash
3. -i 選項表示讓容器的輸入保持開啟;
4. -t 選項表示讓 Docker 分配一個偽終端。

5. docker start 2592d3fad0fb #進入容器前,確保容器正在執行
6. docker exec -it 2592d3fad0fb /bin/bash
7. ls
8. exit #退出容器後,容器仍在執行
9. docker ps -a
示例:

4.8 從宿主機上將檔案匯入到容器中

1. docker ps -a #先獲取需要匯入到的容器ID,然後重新開一個終端

2. 另一個終端上操作
3. echo "this is test file" >> 123.txt #建立測試檔案
4. docker cp 123.txt cef59022a4dd:/opt #將測試檔案匯入到容器內後到容器內的/opt目錄下檢視

示例:
① 先獲取容器ID

② 重新開一個終端,然後建立測試檔案匯入到指定ID的容器內

③ 進入容器進行檢視

4.9 容器的匯出與匯入

1. 使用者可以將任何一個 Docker 容器從一臺機器遷移到另一臺機器。在遷移過程中,可以使用docker export 命令將已經建立好的容器匯出為檔案,2. 無論這個容器是處於執行狀態還是停止狀態均可匯出。可將匯出檔案傳輸到其他機器,通過相應的匯入命令實現容器的遷移。

3. #匯出格式:docker export 容器ID/名稱 > 檔名
4. docker export 2592d3fad0fb > centos7tar

5. #匯入格式:cat 檔名 | docker import – 映象名稱:標籤
6. cat centos7tar | docker import - centos7:test #匯入後會生成映象,但不會建立容器
示例:
① 匯出容器

② 使用scp發給另一個虛擬機器(已安裝docker)

③ 在另一個虛擬機器中匯入容器檢視

4.10 刪除容器

1. 格式:docker rm [-f] 容器ID/名稱
2. docker stop 2592d3fad0fb
3. docker rm 2592d3fad0fb #刪除已經終止狀態的容器

4. docker rm -f 2592d3fad0fb #強制刪除正在執行的容器

5. docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止所有容器
6. 或
7. docker ps -a | awk 'NR>=2{print $1}' | xargs docker stop
8. -----------------------------------------------------------------------------------
9. docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量刪除所有容器
10. 或
11. docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm
12. -----------------------------------------------------------------------------------
13. docker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量刪除所有映象
14. 或
15. docker images | awk 'NR>=2{print $3}' | xargs docker rmi
示例:
① 停止狀態刪除

② 執行狀態強制刪除

③ 批量停止和刪除容器