# K8s Lifecycle ###### tags: `K8s` # minikube archlinux安裝minikube driver kvm2 > pacman -S minikube libvirt qemu-desktop dnsmasq iptables-nft kubelet > sudo systemctl start kubelet > usermod -aG libvirt $(whoami) > minikube config set driver kvm2 //設定driver使用kvm2 > reboot //因為kvm2牽涉kernel,需要重開 > sudo systemctl start libvird > minikube start [使用qemu來安裝minikube](https://wiki.archlinux.org/title/Minikube) 備註:後來發現使用docker當driver也可以正常運作,效能也較佳 # 基本快速啟動指南 1. 清除舊資料 > minikube delete --all 2. 事先請安裝docker跟kubectl 3. 下載新版minikube > curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 > sudo install minikube-linux-amd64 /usr/local/bin/minikube 4. minikube start 5. 開啟vs code,編寫deployment.yaml檔案 請預先安裝k8s相關套件,可以自動生成文件架構 6. 輸入deployment,調整app name、image、port等 ``` apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: rossning92/finance resources: limits: memory: "128Mi" cpu: "500m" ports: - containerPort: 5000 --- apiVersion: v1 kind: Service metadata: name: myapp spec: selector: app: myapp type: NodePort ports: - port: 5000 targetPort: 5000 ``` 7. 佈署 > kubectl apply -f deployment.yaml 8. 檢視pod運作 > kubectl get pods 9. 檢視服務 > kubectl get services 檢視特定服務,輸入後就可以直接跑到那個服務的網站 > minikube service SERVICE_NAME 10. 異動配置 直接修改deployment.yaml內容後,再一次佈署,就會慢慢佈署完成 > kubectl apply -f deployment.yaml 11. 移除服務 > kubectl delete -f deployment.yaml [第一篇](https://cwhu.medium.com/kubernetes-basic-concept-tutorial-e033e3504ec0) [第二篇](https://cwhu.medium.com/kubernetes-implement-ingress-deployment-tutorial-7431c5f96c3e) [第三篇](https://cwhu.medium.com/kubernetes-helm-chart-tutorial-fbdad62a8b61) 1. 建立image > docker build -t yourDockerAccount/yourDockerApp 2. push 到某一個image repos > docker push yourDockerAccount/yourDockerApp:latest 3. 第一個pod yaml > apiVersion: v1 > kind: Pod > metadata: > name: kubernetes-demo-pod > labels: > app: demoApp > spec: > containers: > - name: kubernetes-demo-container > image: hcwxd/kubernetes-demo > ports: > - containerPort: 3000 4. 建立pod => 因應多pod建置,可改用10.Deployment > kubectl create -f kubernetes-demo.yaml 5. 查詢pod狀況 > kubectl get pods 6. 連線到pod =>因應多pod連線問題,可改用7.service.yaml處理取代 > kubectl port-forward kubernetes-demo-pod 3000:3000 7. 建立service yaml > apiVersion: v1 > kind: Service > metadata: > name: my-service > spec: > selector: > app: demoApp > type: NodePort > ports: > - protocol: TCP > port: 3001 > targetPort: 3000 > nodePort: 30390 8. 建立Service元件 > kubectl create -f service.yaml 9. 取得服務狀態 > kubectl get services 10. 建立 Deployment元件 > apiVersion: apps/v1 > kind: Deployment > metadata: > name: my-deployment > spec: > replicas: 3 > template: > metadata: > labels: > app: demoApp > spec: > containers: > - name: kubernetes-demo-container > image: hcwxd/kubernetes-demo > ports: > - containerPort: 3000 > selector: > matchLabels: > app: demoApp 11. 部署 > kubectl create -f deployment.yaml 12. 取得狀態 > kubectl get deploy 13. 版本deployment 歷史 > kubectl rollout history deployment my-deployment 14. 還原上一版 > kubectl rollout undo deploy my-deployment 15. 還原指定版本 > kubectl rollout undo deploy my-deployment --to-revision=2