深入淺出Docker(六) 像谷歌一樣部署你的應用

2021-09-06 22:18:17 字數 2700 閱讀 7689

谷歌發起的開源專案從來都是廣受技術圈的關注和討論,本文將介紹的就是最新的容器編排管理系統

kubernetes。kubernetes開源專案版本更新頻繁,對於初次使用者來說其定義大量的技術術語並且隨時會有新術語出現。在這種不穩定的技術框架之下,對使用者來說確實帶來了一定的技術門檻。為了掌握kubernetes的核心技術概念,本文嘗試通過深入閱讀官方文件資料並整理出核心的使用實踐思路,以飧國內kubernetes技術愛好者參考研究。

第一,在kubernetes的集群環境裡pods是最小的可部署單元,它表示同屬於乙個應用的容器群的邏輯集合。

第二,master節點提供了集群統一檢視的中心控制點。我們可以用乙個master節點來控制多個minion節點。

第三,minion是乙個工作節點,它將執行master節點交付的任務。minions能執行乙個或多個pods。它提供了在容器環境下乙個應用級別的虛擬機器。

通過以下概念圖,我們可以更加清晰的看到kubernetes的技術全貌。

讓我們再深入一點,講一講kubernetes是如何做到這些特性的。

docker近期推出的三大套件:compose、swarm、machine都提供了一些kubernetes的功能,我們需要了解他們之間的區別,讓我們能更好的利用kubernetes做好基礎。

我們可以參照官方提供的各類平台安裝指令碼來部署kubernetes集群系統,本文採用ubuntu系統作為基礎系統用來安裝kubernetes集群。官方提供的指令碼按照以下幾步安裝即可安裝成功:

$ cd cluster/ubuntu-cluster

$ sudo ./build.sh

$ sudo cp ./binaries/* /opt/bin #複製到/opt/bin目錄,主要是為了方便部署指令碼呼叫。

然後,配置kubernetes集群元件,假設我們的機器清單如下:

ip address

role

192.168.100.30

master

192.168.100.31

minion

192.168.100.32

minion

只需要到cluster/ubuntu-cluster目錄下執行一遍configue.sh就可以完成配置。

比如在master節點(192.168.100.30)上:

$ sudo ./configure.sh

welcome to use this script to configure k8s setup

please enter all your cluster node ips, master node comes first

and separated with blank space like "": 192.168.100.30 192.168.100.31 192.168.100.32

this machine acts as

both master and minion: 1

only master: 2

only minion: 3

please choose a role > 2

ip address of this machine > 192.168.100.30

configure success

當你看到資訊「configure success」 時代表這台機器的配置算完成了。

當然,在官方的ubuntu例子中,它使用flannel建立了一套覆蓋網路(overlay network),通過這個網路實現了跨主機的容器互聯互通。大家可以通過圖1flannel網路截圖知道flannel0和docker0被分在同一網段,docker內部容器ip和docker0閘道器之間是有nat的,通過flannel+etcd提供自定義的udp資料報,實現跨主機的容器之間的互聯,通過這個例子可以幫我們深入的理解跨主機容器互聯sdn的主要實現思路。

圖1 flannel網路截圖

在部署完kubernetes系統後我們可以通過內建的命令來驗證服務是否正常。比如執行

$ kubectl get minions

name labels status

192.168.100.30 notready

192.168.100.31 ready

192.168.100.32 ready

如果沒有看到執行的程序,應該去看一下執行日誌,在ubuntu的安裝例項中,日誌統一放在/var/log/upstart/目錄下。

網路相關的元件,主要是etcd服務,還有sdn的元件服務類如flannel。這一塊出問題的情況很少,我遇到大多數問題都是集中在網路拓撲上,通過學習理解這種網路就可以基本解決問題。

kubernetes專案還不是生產級別的工程,沒有在實際的場景中經過生產級別的驗證。我們正好通過官方提供的example目錄中的例子理解我們的場景中到底需要什麼功能,然後反饋到社群,讓kubernetes越來越成熟。

kubernetes在2023年9月發布第乙個版本之後,版本迭代都是按周實施的。官方還不建議使用者在生產環境中使用這套系統。但是它的設計思想以及簡潔的架構設計足以讓我們借鑑到很多任務程上的寶貴經驗。在借鑑的成功案例中,紅帽的openshift最新版本v3中就成功應用了kubernetes實現技術。所以,kubernetes專案是乙個值得大家借鑑學習的優秀開源專案,通過理解它的設計思想,可以很快應用到本地的容器編排集群系統實現中

深入淺出Docker

本文講的是深入淺出docker,編者的話 本文是一篇docker入門文章,作者介紹了docker相關的基礎知識,包括docker映象 dockerfile docker容器 docker hub。然後作者使用docker搭建了乙個wordpress應用,基礎架構包含乙個nginx伺服器來路由 請求 ...

docker 深入淺出

一 如何開始 安裝docker yum y install docker brew cask install docker systemctl start docker systemctl enable docker.service cat etc docker daemon.json regist...

深入淺出Docker系列

深入淺出系列 深入淺出docker 一 docker核心技術預覽 深入淺出docker 二 docker命令列探秘 深入淺出docker 三 docker開源之路 深入淺出docker 四 docker的整合測試部署之道 深入淺出docker 五 基於fig搭建開發環境 原始碼分析系列 docker...