K8s master 的API Server 提供了Restful風格的CRUD接口來讓client 對 cluster內的 resource object狀態進行查詢或修改, 再把結果存在etcd中; API Server同時也是更新etcd中的resource object 狀態的唯一途徑, 其中最常用的方式是命令列指令: kubectl。
圖片參考書:【Kubernetes 進階實踐】
這邊選用minikube作為本機練習K8s的環境, minikube安裝參照Google; kubectl 安裝可參照官網。
因為實際應用多是使用yaml進行部署, 寫成yaml一方面可以讓其他人一起確認內容, 同時在不同的環境部署時也能直接使用同一份yaml。
apiVersion: v1
kind: Pod
metadata:
name: test-nginx
spec:
containers:
- name: test
image: nginx
YAML檔的設定有很多, 今天先說明有使用到的部分, 過兩天再來深入研究吧!
kubectl create -f <file name.yaml>
apiVersion: v1
kind: Pod
metadata:
name: nginx-deploy
namespace: default
spec:
containers:
- name: nginx-deploy
image: nginx
kubectl create -f nginx-pod.yaml
kubectl create -f <file name.yaml>
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
kubectl create -f nginx-service.yaml
kubectl create -f <file name.yaml>
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-deploy
namespace: default
labels:
app: nginx
spec:
containers:
- image: nginx:latest
imagePullPolicy: Always
name: nginx
kubectl create -f nginx-service.yaml
kubectl get <object>
pods
, services
, deployments
...等kubectl describe <object> <object name>
kubectl delete pod <pod name>
kubectl delete service <service name>
kubectl delete deployment <deployment name>
先把環境架好, 準備好工具之後才好繼續走下去。
本機練習的話, Minikube應該是最好上手的, 參考資料多, 安裝也很迅速, 但他沒辦法做出真正的cluster,
如果要架設真正的cluster可以參考 kubeadm的相關資訊。