今天我們會先介紹部署檔的構成,再利用 Minikube 在本機建立測試環境,實際感受一下 Pod 如何被創建與異動的。
描述檔是用來描述或更新 Pods 的設定,當我們寫好 .yaml 並且利用命令或介面部署上 kubernetes,等同於實作了一個 Kubernetes objects,藉此創建 ReplicaSet(一群同性質的 Pods) 或更新其狀態。特別提一下會用 Controllers 當標題,是因為官方文件的分類,將各種描述設定所啟用後的 replica,分別歸類在此類別下,筆者自己覺得滿特別的。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
由於在練習的過程想減少不必要的開支,Minikube 提供我們在本地端建立小型 Kubernetes 的部署,請再依照官方的安裝說明自行安裝。
啟動 Driver 請選擇 docker
> minikube start --driver=docker
? minikube v1.13.1 on Darwin 10.14
✨ Using the docker driver based on user configuration
? Starting control plane node minikube in cluster minikube
? Pulling base image ...
? Downloading Kubernetes v1.19.2 preload ...
> preloaded-images-k8s-v6-v1.19.2-docker-overlay2-amd64.tar.lz4: 486.36 MiB
? Creating docker container (CPUs=2, Memory=1999MB) ...
? Preparing Kubernetes v1.19.2 on Docker 19.03.8 ...
? Verifying Kubernetes components...
? Enabled addons: default-storageclass, storage-provisioner
❗ /usr/local/bin/kubectl is version 1.11.0, which may have incompatibilites with Kubernetes 1.19.2.
? Want kubectl v1.19.2? Try 'minikube kubectl -- get pods -A'
? Done! kubectl is now configured to use "minikube" by default
確認啟動
> minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
檢查一下是否在正確的 cluster 下 (這是保護我們,如已經有其他 k8s cluster 不小心沒換到很悲劇)
> kubectl config current-context
minikube
我們用本文上方的 nginx-deployment.yaml 當作範例,在 MiniKube 上部署一個,含有三個 pods 的 Nginx 服務。
> kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
> kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-hrwg5 1/1 Running 0 48s
nginx-deployment-66b6c48dd5-wlpk5 1/1 Running 0 48s
nginx-deployment-66b6c48dd5-xrgkj 1/1 Running 0 48s
以同一份設定檔,我們試著將 replicas: 3
調整成replicas: 2
,並利用 apply
命令更新 Deployment。
> kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment unchanged
> kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-hrwg5 1/1 Running 0 3m27s
nginx-deployment-66b6c48dd5-wlpk5 1/1 Running 0 3m27s
最後我們將利用同一份設定檔,刪除 Deployment。
> kubectl delete -f nginx-deployment.yaml
deployment.apps "nginx-deployment" deleted
> kubectl get pods
No resources found.
以上就是今天我們的部署初體驗,484意外的簡單快速。重點是 MiniKube 真的可幫我們省下不少運行在網路平台的錢,想當初傻傻的直接在 Google 的 GKE 上練習,真的很蠢啊QAQ 。