-
Pod是節點上的最小的部署單元。它是一組必須一起執行的容器。一般來說,但不是必須的,Pod通常包含一個容器。
-
Service用來定義一組邏輯上存在關係的Pod以及訪問它們的相關策略。
-
Volume是Pod裡所有容器都能訪問的目錄。
-
Namespace是由物理叢集支撐的虛擬叢集。
-
ReplicaSet確保在給定時間執行著特定數量的Pod副本
-
Deployment用來將當前狀態變更到預期狀態
-
StatefulSet用來控制部署順序以及捲的訪問等等。
-
DaemonSet用來在叢集的所有節點或者特定節點執行Pod的複製。
-
Job用來執行一些任務並且在成功完成工作之後或者在給定時間之後退出。
-
kube-apiserver:整個叢集的單點管理點。API server實現了RESTful的介面,用於和工具以及庫函式的通訊。kubectl命令直接和API server互動。
-
kube-controller-manager:透過管理不同型別的控制器來規範叢集的狀態。
-
kube-scheduler:在集群裡的可用節點上排程工作負載。
-
kubelet是節點和Kubernetes Master之間的通訊介面。
-
kube-proxy是網路路由,它將每個節點上透過Kubernetes API定義的服務暴露出去。它還能夠執行簡單的TCP和UDP的流轉發。
$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T20:00:41Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
-
Voting-App:應用前端,用Python編寫,使用者使用它來投票
-
Redis:記憶體內資料庫,作為實時儲存使用
-
Worker:.Net服務,從Redis裡獲得投票並儲存到Postgres資料庫裡
-
DB:PostgreSql資料庫,用作資料庫。
-
Result-App:應用前端,用Node.js編寫,展示投票結果。
Git clone並且cd到投票應用程式的程式碼庫裡。
apiVersion: v1
kind: Service
metadata:
name: result
spec:
type: NodePort
ports:
- name: "result-service"
port: 5001
targetPort: 80
nodePort: 31001
selector:
app: result
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: result
spec:
replicas: 1
template:
metadata:
labels:
app: result
spec:
containers:
- image: dockersamples/examplevotingapp_result:before
name: result
$ kubectl create -f k8s-specifications/
deployment "db" created
service "db" created
deployment "redis" created
service "redis" created
deployment "result" created
service "result" created
deployment "vote" created
service "vote" created
deployment "worker" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
db-86b99d968f-s5pv7 1/1 Running 0 1m
redis-659469b86b-hrxqs 1/1 Running 0 1m
result-59f4f867b8-cthvc 1/1 Running 0 1m
vote-54f5f76b95-zgwrm 1/1 Running 0 1m
worker-56578c48f8-h7zvs 1/1 Running 0 1m
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP 10.109.241.59 <none> 5432/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
redis ClusterIP 10.102.242.148 <none> 6379/TCP 2m
result NodePort 10.106.7.255 <none> 5001:31001/TCP 2m
vote NodePort 10.103.28.96 <none> 5000:31000/TCP 2m
# 啟動Minikube伺服器
$ minikube start
# 得到Minikube IP
$ minikube ip
$ kubectl version #得到kubectl版本
$ kubectl cluster-info #得到叢集資訊
$ kubectl create -f ./file.yml
$ kubectl create -f ./file1.yml -f ./file2.yaml
$ kubectl create -f ./dir
$ kubectl create -f http://www.fpaste.org/279276/48569091/raw/
$ kubectl get services
$ kubectl get pods --all-namespaces
$ kubectl get pods -o wide
$ kubectl get rc
$ kubectl get pods -l env=production
$ kubectl get services --sort-by=.metadata.name
$ kubectl label pods new-label=awesome
$ kubectl annotate pods icon-url=http://goo.gl/XXBTWq
$ kubectl delete pod pingredis-XXXXX
$ kubectl scale --replicas=3 deployment nginx
$ kubectl logs
# 執行tail -f 得到日誌輸出
$ kubectl logs -f
# 以互動shell執行pod
$ kubectl run -i --tty busybox --image=busybox -- sh
# 連線到執行著的容器裡
$ kubectl attach -i
# 將Pod的埠轉發到本地機器
$ kubectl port-forward <local-and-remote-port>
# 將埠轉發到服務
$ kubectl port-forward
# 在已有pod裡執行命令(僅有1個容器的情況下)
$ kubectl exec -- ls /
# 在已有pod裡執行命令(多個容器的情況下)
$ kubectl exec -c -- ls /
$ kubectl exec busybox -- nslookup kubernetes
$ kubectl exec busybox -- nslookup kubernetes.default
$ kubectl exec busybox -- nslookup kubernetes.default.svc.cluster.local
$ kubectl run nginx --image=nginx:1.9.12
$ kubectl expose deployment nginx --port=80 --type=LoadBalancer