k8s的使用入門


1.kubectl命令就是apiserver的客戶端工具,可以實現對nodes資源的增刪改查.

# 描述一個節點的信息 
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.發布端口

# 縮寫: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解析

# 查看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的參數

# 控制器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,出了什么錯的話,配置文件的最上面會有提示.

 

參考博客:http://blog.itpub.net/28916011/viewspace-2213635/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM