123
學習如何與 Kubernetes 協作並將應用程式交付到 K8s 的開發人員。想要更高效解決 CI/CD 相關任務並成為熟練 werf 使用者的 DevOps 工程師也將從中受益。
First steps
在本章中,我們將構建一個映像並將應用程式部署到 Kubernetes。
我們將使用一個簡單的 shell 腳本作為範例應用程式。此腳本會在請求 /ping
端點時返回 pong。我們將設置 werf 環境,將應用程式部署到本地的 Minikube 叢集,對應用程式進行修改和配置變更,並回顧一些有關使用 werf 和 Kubernetes 的理論知識。
Building an image
我們將使用 werf 和 Dockerfile 構建應用程式的 Docker 映像。接著,我們會在本地運行它來測試構建的映像。
Create a new repository with the application
# Clone the example repository to ~/werf-guide/guides (if you have not cloned it yet).
test -e ~/werf-guide/guides || git clone https://github.com/werf/website ~/werf-guide/guides
# Copy the (unchanged) application files to ~/werf-guide/app.
rm -rf ~/werf-guide/app
cp -rf ~/werf-guide/guides/examples/basic/000_app ~/werf-guide/app
# Make the ~/werf-guide/app directory a git repository.
cd ~/werf-guide/app
git init
git add .
git commit -m initial
# To see what changes we will make later in this chapter, let's replace all the application files
# in the repository with new, modified files containing the changes described below.
git rm -r .
cp -rf ~/werf-guide/guides/examples/basic/001_build/. .
git add .
git commit -m WIP
What changes we will make
# Enter the command below to show files we are going to change.
git show --stat
# Enter the command below to show the changes that will be made.
git show
Dockerfile
將 werf 與 Dockerfile 整合
主要的 werf 配置檔 werf.yaml
(位於倉庫的根目錄)指定了構建應用程式時使用的 Dockerfile:
werf.yaml
檔案可以同時描述多個映像的組裝。
Building using werf
請注意,在開始基於 werf 的構建/部署過程之前,您必須將所有檔案提交到版本控制中。
接下來,我們會討論為何這是必要的,以及如何在本地開發中避免創建不必要的提交。
我們在上面的「創建新應用程式倉庫」部分已經做過這個步驟。然而,通常情況下,您需要運行 git add
和 git commit
命令。
使用 werf build
命令開始構建:
werf build
Starting the application
您可以使用 werf run
命令,通過構建的映像在本地運行容器:
werf run app --docker-options="-ti --rm -p 8000:8000" -- /app/start.sh
--docker-options
標誌設置 Docker 參數,而要在容器中運行的命令則放在最後。
打開瀏覽器並訪問 http://127.0.0.1:8000/ping 來檢查應用程式是否正在運行。或者,您可以使用 curl
工具:
您將會收到 pong
訊息作為回應,並且容器日誌中會出現以下文字:
GET /ping HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: curl/7.67.0
Accept: */*
Preparing the environment
在本章中,我們將設置一個 Kubernetes 叢集、容器註冊表以及本地環境來部署應用程式。
Deploying a cluster
安裝並運行 Minikube,使用 Minikube 創建一個新的 Kubernetes 叢集:
## delete the existing minikube cluster (if exists)
minikube delete
## start a new minikube cluster
minikube start --driver=hyperkit
Minikube hyperkit不支援ARM,我改用docker驅動
Installing NGINX Ingress Controller
安裝 NGINX Ingress 控制器
#Install the NGINX Ingress Controller:
minikube addons enable ingress
#Give it a few minutes and check if the Ingress Controller has started successfully:
kubectl -n ingress-nginx get pod
Updating the hosts file
修改 hosts 文件的目的是將 werf-guide-app.test
這個域名映射到特定的 IP 地址或主機名。
echo "$(minikube ip) werf-guide-app.test" | sudo tee -a /etc/hosts
Configuring the container registry
Authorizing in Docker Hub
創建一個 Docker Hub ID 並建立一個名為 werf-guide-app
的私人倉庫。我們將把構建的映像存儲在其中。
werf cr login https://index.docker.io/v1/ -u <DOCKER HUB USERNAME> -p <DOCKER HUB PASSWORD>
Creating a Secret
kubectl create namespace werf-guide-app
kubectl create secret docker-registry registrysecret \
--docker-server='https://index.docker.io/v1/' \
--docker-username='<DOCKER HUB USERNAME>' \
--docker-password='<DOCKER HUB PASSWORD>'