iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Software Development

Go Distributed & Go Consistently系列 第 22

Day22 Kubernetes (Minikube & Deployment)

今天我們會先介紹部署檔的構成,再利用 Minikube 在本機建立測試環境,實際感受一下 Pod 如何被創建與異動的。

Controllers

描述檔是用來描述或更新 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
  • apiVersion : 決定創建 object 的 Kubernetes API 版本
  • kind : 部署類型,包含 Deployment、StatefulSets、DaemonSet ...
  • metadata : 描述 object 的屬性,標上這份描述檔名稱與額外標籤
  • spec : 描述啟動後 object 的狀態,包含 Pods 數、標籤、image、expose ports ...

Install Minikube

由於在練習的過程想減少不必要的開支,Minikube 提供我們在本地端建立小型 Kubernetes 的部署,請再依照官方的安裝說明自行安裝。
Install Minikube

啟動 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

Deploy

檢查一下是否在正確的 cluster 下 (這是保護我們,如已經有其他 k8s cluster 不小心沒換到很悲劇)

> kubectl config current-context

minikube

Create

我們用本文上方的 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

Apply

以同一份設定檔,我們試著將 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

DELETE

最後我們將利用同一份設定檔,刪除 Deployment。

> kubectl delete -f nginx-deployment.yaml

deployment.apps "nginx-deployment" deleted
> kubectl get pods

No resources found.

以上就是今天我們的部署初體驗,484意外的簡單快速。重點是 MiniKube 真的可幫我們省下不少運行在網路平台的錢,想當初傻傻的直接在 Google 的 GKE 上練習,真的很蠢啊QAQ /images/emoticon/emoticon67.gif


上一篇
Day21 Kubernetes (Pods & Services)
下一篇
Day23 Kubernetes (Kubernetes on Docker Desktop & Pod Lifetime)
系列文
Go Distributed & Go Consistently30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言