模拟k8s项目的生命周期
文章目錄
- 模擬k8sngin項目生命周期
- Kubectl是管理k8s集群的命令行工具
- k8s項目創建資源
- 發布nginx服務提供負載均衡功能
- 為什么可以訪問nginx?
- 查看proxy負載均衡端口
- 更新nginx為1.14版本
- 回滾nginx
- 刪除nginx項目
模擬k8sngin項目生命周期
項目的生命周期,創建–》發布–》更新–》回滾–》刪除
了解pod類型
- port
port是k8s集群內部訪問service的端口,即通過clusterIP: port可以訪問到某個service
- nodePort
nodePort是外部訪問k8s集群中service的端口,通過nodeIP: nodePort可以從外部訪問到某個service。
- targetPort
targetPort是pod的端口,從port和nodePort來的流量經過kube-proxy流入到后端pod的targetPort上,最后進入容器。
- containerPort
containerPort是pod內部容器的端口,targetPort映射到containerPort。
k8s群集提供外部服務圖
負載均衡功能
Kubectl是管理k8s集群的命令行工具
[root@localhost bin]# kubectl --help kubectl controls the Kubernetes cluster manager. Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/Basic Commands (Beginner):create Create a resource from a file or from stdin.expose 使用 replication controller, service, deployment 或者 pod 并暴露它作為一個 新的 Kubernetes Servicerun 在集群中運行一個指定的鏡像set 為 objects 設置一個指定的特征Basic Commands (Intermediate):explain 查看資源的文檔get 顯示一個或更多 resourcesedit 在服務器上編輯一個資源delete Delete resources by filenames, stdin, resources and names, or by resources and label selectorDeploy Commands:rollout Manage the rollout of a resourcescale 為 Deployment, ReplicaSet, Replication Controller 或者 Job 設置一個新的副本數量autoscale 自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量Cluster Management Commands:certificate 修改 certificate 資源.cluster-info 顯示集群信息top Display Resource (CPU/Memory/Storage) usage.cordon 標記 node 為 unschedulableuncordon 標記 node 為 schedulabledrain Drain node in preparation for maintenancetaint 更新一個或者多個 node 上的 taintsTroubleshooting and Debugging Commands:describe 顯示一個指定 resource 或者 group 的 resources 詳情logs 輸出容器在 pod 中的日志attach Attach 到一個運行中的 containerexec 在一個 container 中執行一個命令port-forward Forward one or more local ports to a podproxy 運行一個 proxy 到 Kubernetes API servercp 復制 files 和 directories 到 containers 和從容器中復制 files 和 directories.auth Inspect authorizationk8s項目創建資源
[root@localhost ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3image 鏡像 replicsa 副本集
查看資源地址
我們可以去接口看一下
查看所有服務
[root@localhost ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-depolyment-5d648c8f47-9k2q9 1/1 Running 0 13m pod/nginx-depolyment-5d648c8f47-9p2w4 1/1 Running 0 13m pod/nginx-depolyment-5d648c8f47-frqsk 1/1 Running 0 13mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22hNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-depolyment 3 3 3 3 13mNAME DESIRED CURRENT READY AGE replicaset.apps/nginx-depolyment-5d648c8f47 3 3 3 13m查看是否提供服務(還沒有發布服務)
[root@localhost ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h發布nginx服務提供負載均衡功能
[root@localhost ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePortDeployment為Pod和ReplicaSet提供了一個聲明式定義方
查看是否提供服務(有服務可以訪問了)
[root@localhost ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h nginx-service NodePort 10.0.0.176 <none> 80:30967/TCP 23s網絡狀態詳細信息
[root@localhost ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-7697996758-9hqnk 1/1 Running 0 65m 172.17.38.2 192.168.136.40 <none> nginx-7697996758-g6pfx 1/1 Running 0 65m 172.17.38.3 192.168.136.40 <none> nginx-7697996758-z5pht 1/1 Running 0 65m 172.17.27.3 192.168.136.30 <none>查看資源對象簡寫
[root@localhost bin]# kubectl api-resources查看關聯后端的節點
[root@localhost ~]# kubectl get ep NAME ENDPOINTS AGE kubernetes 192.168.136.60:6443,192.168.136.88:6443 23h nginx-service 172.17.27.3:80,172.17.38.2:80,172.17.38.3:80 61m為什么可以訪問nginx?
創建過程
查看proxy負載均衡端口
kubernetes里kube-proxy支持三種模式,在v1.8之前我們使用的是iptables 以及 userspace兩種模式,在kubernetes 1.8之后引入了ipvs模式
在node01操作 同樣安裝ipvsadmin工具查看
[root@localhost ~]# yum install ipvsadm -y [root@localhost ~]# ipvsadm -L -n TCP 192.168.136.40:30001 rr-> 172.17.27.2:8443 Masq 1 0 0 TCP 192.168.136.40:30967 rr-> 172.17.27.3:80 Masq 1 0 0 -> 172.17.38.2:80 Masq 1 0 0 -> 172.17.38.3:80 Masq 1 0 0在node02操作 同樣安裝ipvsadmin工具查看
[root@localhost ~]# yum install ipvsadm -y [root@localhost ~]# ipvsadm -L -n TCP 192.168.136.30:30967 rr-> 172.17.27.3:80 Masq 1 0 0 -> 172.17.38.2:80 Masq 1 0 0 -> 172.17.38.3:80 Masq 1 0 0訪問地址
[root@localhost bin]# kubectl logs nginx-7697996758-9hqnk更新nginx為1.14版本
查看版本號
查看版本號
更新命令
我們可以看幫助信息
[root@localhost bin]# kubectl set --help ]Configure application resources These commands help you make changes to existing application resources.Available Commands:env Update environment variables on a pod templateimage 更新一個 pod template 的鏡像resources 在對象的 pod templates 上更新資源的 requests/limitsselector 設置 resource 的 selectorserviceaccount Update ServiceAccount of a resourcesubject Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBindingUsage:kubectl set SUBCOMMAND [options]Use "kubectl <command> --help" for more information about a given command. Use "kubectl options" for a list of global command-line options (applies to all commands).獲取修改模板
[root@localhost bin]# kubectl set image --help Examples:# Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1找到更新命令開始更新為1.14
[root@localhost bin]# kubectl set image deployment/nginx nginx=nginx:1.14 deployment.extensions/nginx image updated處于動態監聽狀態
[root@localhost ~]# kubectl get pods -w NAME READY STATUS RESTARTS AGE nginx-6ff7c89c7c-2hxbj 0/1 ContainerCreating 0 5s 創建 nginx-7697996758-9hqnk 1/1 Running 0 95m nginx-7697996758-g6pfx 1/1 Running 0 95m nginx-7697996758-z5pht 1/1 Running 0 95m nginx-6ff7c89c7c-2hxbj 1/1 Running 0 38s nginx-7697996758-g6pfx 1/1 Terminating 0 96m 刪除 nginx-6ff7c89c7c-n9kwl 0/1 Pending 0 0s nginx-6ff7c89c7c-n9kwl 0/1 Pending 0 1s nginx-6ff7c89c7c-n9kwl 0/1 ContainerCreating 0 1s 創建 nginx-7697996758-g6pfx 0/1 Terminating 0 96m 刪除 nginx-7697996758-g6pfx 0/1 Terminating 0 96m nginx-7697996758-g6pfx 0/1 Terminating 0 96m nginx-6ff7c89c7c-n9kwl 1/1 Running 0 23s nginx-7697996758-9hqnk 1/1 Terminating 0 96m nginx-6ff7c89c7c-7wmwv 0/1 Pending 0 0s nginx-6ff7c89c7c-7wmwv 0/1 Pending 0 0s nginx-6ff7c89c7c-7wmwv 0/1 ContainerCreating 0 0s nginx-7697996758-9hqnk 0/1 Terminating 0 96m nginx-7697996758-9hqnk 0/1 Terminating 0 96m nginx-7697996758-9hqnk 0/1 Terminating 0 96m nginx-7697996758-9hqnk 0/1 Terminating 0 96m nginx-6ff7c89c7c-7wmwv 1/1 Running 0 18s nginx-7697996758-z5pht 1/1 Terminating 0 96m nginx-7697996758-z5pht 0/1 Terminating 0 96m nginx-7697996758-z5pht 0/1 Terminating 0 97m nginx-7697996758-z5pht 0/1 Terminating 0 97m這里規律是先創建在刪除
刷新查看是否更新成功
回滾nginx
查看命令幫助
[root@localhost bin]# kubectl rollout --helpManage the rollout of a resource.Valid resource types include: \* deployments \* daemonsets \* statefulsetsExamples:\# Rollback to the previous deploymentkubectl rollout undo deployment/abc\# Check the rollout status of a daemonsetkubectl rollout status daemonset/fooAvailable Commands:history 顯示 rollout 歷史pause 標記提供的 resource 為中止狀態resume 繼續一個停止的 resourcestatus 顯示 rollout 的狀態undo 撤銷上一次的 rolloutUsage:kubectl rollout SUBCOMMAND [options]Use "kubectl <command> --help" for more information about a given command.Use "kubectl options" for a list of global command-line options (applies to allcommands).查看歷史版本
[root@localhost ~]# kubectl rollout history deployment/nginx deployment.extensions/nginx REVISION CHANGE-CAUSE 1 <none> 2 <none>執行回滾
[root@localhost bin]# kubectl rollout undo deployment/nginxdeployment.extensions/nginx檢查回滾狀態
[root@localhost bin]# kubectl rollout status deployment/nginxdeployment "nginx" successfully rolled out處于動態監聽狀態
[root@localhost ~]# kubectl get pods -w 還是先創建在刪除刪除nginx項目
查看deployment
[root@localhost ~]# kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx 3 3 3 3 117m刪除nginx
[root@localhost ~]# kubectl delete deployment/nginx deployment.extensions "nginx" deleted查看服務SVC
[root@localhost ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 24h nginx-service NodePort 10.0.0.176 <none> 80:30967/TCP 117m刪除服務SVC
[root@localhost ~]# kubectl delete svc/nginx-service service "nginx-service" deleted查看已經刪除
[root@localhost ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 24h查看具體資源的詳細信息
[root@localhost bin]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.deployment.apps/nginx created查看服務
[root@localhost bin]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-7697996758-2ph6x 0/1 ContainerCreating 0 13s nginx-7697996758-jfngb 0/1 ContainerCreating 0 13s nginx-7697996758-w4z29 0/1 ContainerCreating 0 13s查看nginx具體資源
[root@localhost ~]# kubectl describe pod nginx-7697996758-2ph6x Name: nginx-7697996758-2ph6x Namespace: default Priority: 0 PriorityClassName: <none> Node: 192.168.136.40/192.168.136.40 Start Time: Sat, 10 Oct 2020 00:35:12 +0800 Labels: pod-template-hash=7697996758run=nginx Annotations: <none> Status: Running IP: 172.17.38.3 Controlled By: ReplicaSet/nginx-7697996758 Containers:nginx:Container ID: docker://a7d0945872e9b9d71be44a8376df6d300384ad92fcf84b4852a90f1e831b4580Image: nginx:latestImage ID: docker-pullable://nginx@sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500Port: 80/TCPHost Port: 0/TCPState: RunningStarted: Sat, 10 Oct 2020 00:35:34 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-w6xph (ro) Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True Volumes:default-token-w6xph:Type: Secret (a volume populated by a Secret)SecretName: default-token-w6xphOptional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300snode.kubernetes.io/unreachable:NoExecute for 300s Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 34s default-scheduler Successfully assigned default/nginx-7697996758-2ph6x to 192.168.136.40Normal Pulling 30s kubelet, 192.168.136.40 pulling image "nginx:latest"Normal Pulled 13s kubelet, 192.168.136.40 Successfully pulled image "nginx:latest"Normal Created 13s kubelet, 192.168.136.40 Created containerNormal Started 12s kubelet, 192.168.136.40 Started container查看deployment資源
[root@localhost bin]# kubectl describe deployment/nginx進入pod
[root@localhost ~]# kubectl exec -it nginx-7697996758-2ph6x bash root@nginx-7697996758-2ph6x:/# ls bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var boot docker-entrypoint.d etc lib media opt root sbin sys usr總結
以上是生活随笔為你收集整理的模拟k8s项目的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Error from server (F
- 下一篇: 内存多大:超频性能独步同行,稳定耐用更胜