1.kubectl命令就是apiserver的客戶端工具,能夠實現對nodes資源的增刪改查.html
# 描述一個節點的信息 kubectl describe node k8s-node1 # 查看k8s集羣信息 kubectl cluster-info # 建立並運行pod # --image:表示docker官網的鏡像名稱 # --replicas:表示建立並啓動幾個Pod,不寫默認就是1個 # --dry-run:表示並不真正執行,去掉這個參數就會啓動pod kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 kubectl run --generator=deployment/apps.v1 # 被強烈反對而且未來會移除這個參數,能夠使用: kubectl run --generator=run-pod/v1 or kubectl create instead kubectl get deployment # 1/1表示這個pod裏面有一個容器,而且都準備好了,RESTARTs=0表示沒有被重啓過 kubectl get pod kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-deploy-84cbfc56b6-w9n4j 1/1 Running 0 4h26m 10.244.2.2 k8s-node2 # 能夠看到nginx在node2節點上運行着,ip地址是10.244.2.2,使用的是node2節點上cni0的地址 # 在集羣內都可訪問這個地址,k8s以外是沒法訪問 curl -I 10.244.2.2 # 刪除pod,控制器管理pod,刪除正在運行的pod,控制器會立刻再建立一個新的 kubectl delete pods nginx-deploy-84cbfc56b6-w9n4j
2.發佈端口node
# 縮寫:pod(po),service(svc),replicationcontroller(rc),deployment(deploy),replicaset(rs) # 起名時注意:以小寫字母、數字、字符或'-'組成,不能有下劃線 # 給這個控制器下的pod建立一個service,名字叫my-nginx # service的端口(--port)是80,映射到nginx-deploy pod的端口(--target-port)端口是80 kubectl expose deployment nginx-deploy --name=my-nginx --port=80 --target-port=80 --protocol=TCP kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d11h my-nginx ClusterIP 10.111.172.213 <none> 80/TCP 31s # service生成iptables訪問規則,把cluster ip對應的地址和port都調度至標籤選擇器關聯到的各pod端 kubectl describe svc my-nginx Name: my-nginx Namespace: default Labels: run=nginx-deploy # 哪一個pod是這個標籤,my-nginx就會映射到這個pod上 Annotations: <none> Selector: run=nginx-deploy Type: ClusterIP IP: 10.111.172.213 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 10.244.2.2:80 # 結束點:具體到pod Session Affinity: None Events: <none> # 查看各pod的標籤 kubectl get pods --show-labels
3.DNS解析nginx
# 查看coredns kubectl get pods -n kube-system -o wide | grep coredns kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 7d16h yum -y install bind-utils # 起一個busybox,查找完整域名 kubectl run client --image=busybox --replicas=1 -it --restart=Never If you don't see a command prompt, try pressing enter. / # cat /etc/resolv.conf nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5 # 使用集羣內部DNS解析my-nginx的域名 dig -t A my-nginx.default.svc.cluster.local @10.96.0.10 my-nginx.default.svc.cluster.local. 5 IN A 10.111.172.213 # service用於爲pod提供固定訪問入口,因此無論pod怎麼變,svc實現了"一次建立,永久使用" # 在剛纔那個busybox中能夠使用域名訪問到nginx wget -O - -q my-nginx
4.動態升級;手動修改svc的參數docker
# 控制器deployment也是經過標籤選擇器來管理Pod的 kubectl describe deployment nginx-deploy # 動態修改replicas副本的數量 kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2 kubectl get deployment -w # 監控,不會退出 # 動態擴展副本數量爲5個 kubectl scale --replicas=5 deployment myapp # 縮減爲3個 kubectl scale --replicas=3 deployment myapp # 建立service kubectl expose deployment myapp --name=svc-myapp --port=80 # 在busybox內部訪問svc-myapp,可看到輪詢的效果 wget -O - -q svc-myapp/hostname.html # 能夠看到這個pod中的容器名爲myapp kubectl describe pods myapp-9b4987d5-9sxgs # 動態升級pod版本,第一個myapp是控制器名,第二個myapp是該控制器下的pod的容器名 kubectl set image deployment myapp myapp=ikubernetes/myapp:v2 # 動態查看更新狀態 kubectl rollout status deployment myapp # 回滾pod至指定版本,不指定版本表示回滾到上一個版本 kubectl rollout undo deployment myapp:v1 # 在iptables中可看到service就是一條規則 iptables -vnL -t nat # 想要在集羣外部訪問pod,把type: ClusterIP改爲NodePort kubectl edit svc svc-myapp kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d17h svc-myapp NodePort 10.102.101.70 <none> 80:30515/TCP 2h
此時這個svc會讓node節點開一個端口,監聽在30515上,訪問http://10.0.0.20:30515/或http://10.0.0.30:30515/均可以獲得nginx頁面,若是想把type: NodePort改爲ClusterIP,出了什麼錯的話,配置文件的最上面會有提示.api
參考博客:http://blog.itpub.net/28916011/viewspace-2213635/bash