首页 > 其他分享 >Kubernetes 学习整理(四)

Kubernetes 学习整理(四)

时间:2024-01-24 21:56:38浏览次数:23  
标签:kubectl Kubernetes kubernetes IP bootcamp 学习 atlantic 整理 ali1

Scale the app

Scaling will increase the number of Pods to the new desired state.

Pre-config: expose the app publicly

kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   6d
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed
kubectl get services
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.43.0.1       <none>        443/TCP          6d
kubernetes-bootcamp   NodePort    10.43.136.101   <none>        8080:32673/TCP   5s
kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-855d5cc575-v22dh   1/1     Running   0          2d
kubectl get pods --show-labels
NAME                                   READY   STATUS    RESTARTS   AGE   LABELS
kubernetes-bootcamp-855d5cc575-v22dh   1/1     Running   0          2d    app=kubernetes-bootcamp,pod-template-hash=855d5cc575,version=v1
kubectl get services --show-labels
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   LABELS
kubernetes            ClusterIP   10.43.0.1       <none>        443/TCP          6d    component=apiserver,provider=kubernetes
kubernetes-bootcamp   NodePort    10.43.136.101   <none>        8080:32673/TCP   52s   app=kubernetes-bootcamp

一些概念

"App" 指的是您要在 Kubernetes 中运行的应用程序或服务。这可能包括一个或多个容器,定义了应用程序的代码和运行时环境。
"Deployment" 用于声明性地定义和管理 Pod 的副本, 指定应用程序的期望状态,包括副本数量、容器镜像和其他配置。
负责 Pod 的创建、更新和删除,以确保应用程序的指定副本数量在运行。实现滚动更新、回滚、扩展和缩减副本等操作。
"ReplicaSet" 负责确保在集群中始终运行指定数量的 Pod 副本。每个 Deployment 关联到一个或多个 ReplicaSet。
"Service" 用于定义一组 Pod 的网络端点,并提供负载均衡和服务发现。用于定义一个网络入口,将流量引导到一组 Pod。通常,一个 Service 与一个 Deployment 相关联,以提供对该 Deployment 管理的 Pod 的访问。

使用场景一: distribute traffic to all avalible pods.

当一个APP 运行在多个pod上时,需要一个方法将流量分发到各个pod上去。 Service 有集成的load-balancer可以实现网络分发的功能,它会使用endpoints来监控所有available pods.

Scaling a deployment

查看 deployment

kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           2d4h

NAME: lists the names of the Deployments in the cluster.
READY: 当前/预期 replicas。 shows the ratio of CURRENT/DESIRED replicas
UP-TO-DATE: 已达到预期的replicas数量。 displays the number of replicas that have been updated to achieve the desired state.
AVAILABLE: 能够给user使用的replica数量。 displays how many replicas of the application are available to your users.
AGE: APP running time. displays the amount of time that the application has been running.

查看replicaSet 数量

命名: deployment-name-randomstring

kubectl get rs
NAME                             DESIRED   CURRENT   READY   AGE
kubernetes-bootcamp-855d5cc575   1         1         1       2d5h

scale deployment 从 1 到 4

kubectl scale deployments/kubernetes-bootcamp --replicas=4
# deployment.apps/kubernetes-bootcamp scaled
kubectl get deployment
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/4     4            1           2d5h

确认scale之后的信息

kubectl get deployment
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           2d5h

kubectl get pods -o wide
NAME                                   READY   STATUS    RESTARTS   AGE    IP              NODE                   NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-855d5cc575-kxrj6   1/1     Running   0          69s    10.42.236.127   ali1-atlantic-node-1   <none>           <none>
kubernetes-bootcamp-855d5cc575-v22dh   1/1     Running   0          2d5h   10.42.0.22      ali1-atlantic-node-3   <none>           <none>
kubernetes-bootcamp-855d5cc575-vqff8   1/1     Running   0          69s    10.42.65.179    ali1-atlantic-host     <none>           <none>
kubernetes-bootcamp-855d5cc575-x5ksr   1/1     Running   0          69s    10.42.208.227   ali1-atlantic-node-2   <none>           <none>

可以看到具体的event:Scaled up replica set kubernetes-bootcamp-855d5cc575 to 4 from 1


 kubectl describe deployments/kubernetes-bootcamp
Name:                   kubernetes-bootcamp
Namespace:              default
CreationTimestamp:      Sun, 21 Jan 2024 22:27:58 -0800
Labels:                 app=kubernetes-bootcamp
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=kubernetes-bootcamp
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=kubernetes-bootcamp
  Containers:
   kubernetes-bootcamp:
    Image:        gcr.io/google-samples/kubernetes-bootcamp:v1
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   kubernetes-bootcamp-855d5cc575 (4/4 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  2m14s  deployment-controller  Scaled up replica set kubernetes-bootcamp-855d5cc575 to 4 from 1

提取APP 相关port 和 随便哪个IP

但是外部是无法通过podip来访问的,~~得需要通过serviceIP, ~~
访问app, 要用它的node 和 port, 因为type是NodePort,意思是所有node上的这个port都可以访问


# 提取service的port
 export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo $NODE_PORT
# 32673


# 查看pod相关的IP,但是外部是无法通过podip来访问的,得需要通过serviceIP, 

kubectl get pods -l app=kubernetes-bootcamp -o wide
NAME                                   READY   STATUS    RESTARTS   AGE    IP              NODE                   NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-855d5cc575-kxrj6   1/1     Running   0          10m    10.42.236.127   ali1-atlantic-node-1   <none>           <none>
kubernetes-bootcamp-855d5cc575-v22dh   1/1     Running   0          2d5h   10.42.0.22      ali1-atlantic-node-3   <none>           <none>
kubernetes-bootcamp-855d5cc575-vqff8   1/1     Running   0          10m    10.42.65.179    ali1-atlantic-host     <none>           <none>
kubernetes-bootcamp-855d5cc575-x5ksr   1/1     Running   0          10m    10.42.208.227   ali1-atlantic-node-2   <none>           <none>


# 查看service
kubectl get services -l app=kubernetes-bootcamp
NAME                  TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes-bootcamp   NodePort   10.43.136.101   <none>        8080:32673/TCP   4h29m

# 查看service详情
kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.43.136.101
IPs:                      10.43.136.101
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  32673/TCP
Endpoints:                10.42.0.22:8080,10.42.208.227:8080,10.42.236.127:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

可以看到,每次访问都命中不同的pod, 也就是说做了load-balance.

export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
ali1-atlantic-host:~/k8scluster-automation # echo "NODE_PORT=$NODE_PORT"
NODE_PORT=32673
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation # export NODE_IP="$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')"
ali1-atlantic-host:~/k8scluster-automation # echo $NODE_IP
10.224.35.217

# 可以看到,每次访问都命中不同的pod, 也就是说做了load-balance.
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-kxrj6 | v=1
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:NODE_PORT"
curl: (3) URL using bad/illegal format or missing URL
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-kxrj6 | v=1
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-vqff8 | v=1
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-x5ksr | v=1
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-x5ksr | v=1
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-x5ksr | v=1
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-kxrj6 | v=1

暂时无法解析hostname


curl http://"kubernetes-bootcamp:$NODE_PORT"
curl: (6) Could not resolve host: kubernetes-bootcamp

Scale Down 从4到2

# scale down from 4 to 2
kubectl scale deployments/kubernetes-bootcamp --replicas=2
#deployment.apps/kubernetes-bootcamp scaled

# check the deployment information
kubectl get deployments/kubernetes-bootcamp
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   2/2     2            2           2d6h

# check the service information 
kubectl get service  -l app=kubernetes-bootcamp
NAME                  TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes-bootcamp   NodePort   10.43.136.101   <none>        8080:32673/TCP   5h30m

# show the detail information, 2 endpoints
kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.43.136.101
IPs:                      10.43.136.101
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  32673/TCP
Endpoints:                10.42.0.22:8080,10.42.236.127:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>


kubectl get pods -o wide
NAME                                   READY   STATUS    RESTARTS   AGE    IP              NODE                   NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-855d5cc575-kxrj6   1/1     Running   0          80m    10.42.236.127   ali1-atlantic-node-1   <none>           <none>
kubernetes-bootcamp-855d5cc575-v22dh   1/1     Running   0          2d6h   10.42.0.22      ali1-atlantic-node-3   <none>           <none>

使用场景二: rolling up without downtime.

用户希望APP 一直是available, 开发被要求一天要升级多个版本, rolling update能满足所有人的需求,保证升级过程中0停机。

A rolling update allows a Deployment update to take place with zero downtime.

查看当前service相关pod的详情

kubectl describe pods -l app=kubernetes-bootcamp

 
 kubectl describe pods -l app=kubernetes-bootcamp
Name:                 kubernetes-bootcamp-855d5cc575-kxrj6
Namespace:            default
Priority:             500000
Priority Class Name:  cmo-medium-priority
Service Account:      default
Node:                 ali1-atlantic-node-1/10.224.35.216
Start Time:           Wed, 24 Jan 2024 03:31:50 -0800
Labels:               app=kubernetes-bootcamp
                      pod-template-hash=855d5cc575
Annotations:          cni.projectcalico.org/containerID: 45bb5644d9dc7135a31392c35eaaec6dad831c3a47d0b131da86b1167e05b40c
                      cni.projectcalico.org/podIP: 10.42.236.127/32
                      cni.projectcalico.org/podIPs: 10.42.236.127/32
                      k8s.v1.cni.cncf.io/network-status:
                        [{
                            "name": "k8s-pod-network",
                            "ips": [
                                "10.42.236.127"
                            ],
                            "default": true,
                            "dns": {}
                        }]
Status:               Running
IP:                   10.42.236.127
IPs:
  IP:           10.42.236.127
Controlled By:  ReplicaSet/kubernetes-bootcamp-855d5cc575
Containers:
  kubernetes-bootcamp:
    Container ID:   containerd://9a4973511ec64365197a5693b42ebbdfcc453965055913d65114c9fc1714b10c
    Image:          gcr.io/google-samples/kubernetes-bootcamp:v1
    Image ID:       gcr.io/google-samples/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 24 Jan 2024 03:32:24 -0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-zkdff (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-zkdff:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>

将当前pod image升级到V2

注意到,升级后,除了Image 变为V2, event事件里也有详细message体现

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.apps/kubernetes-bootcamp image updated
ali1-atlantic-host:~/k8scluster-automation # kubectl describe pods -l app=kubernetes-bootcamp
Name:                 kubernetes-bootcamp-69b6f9fbb9-rvcz4
Namespace:            default
Priority:             500000
Priority Class Name:  cmo-medium-priority
Service Account:      default
Node:                 ali1-atlantic-node-3/10.224.35.209
Start Time:           Wed, 24 Jan 2024 04:58:39 -0800
Labels:               app=kubernetes-bootcamp
                      pod-template-hash=69b6f9fbb9
Annotations:          cni.projectcalico.org/containerID: 764a605c2c9b35abe4f78576fe5e902c5006d14c519aeda55e1dad5fc99dc637
                      cni.projectcalico.org/podIP: 10.42.0.23/32
                      cni.projectcalico.org/podIPs: 10.42.0.23/32
                      k8s.v1.cni.cncf.io/network-status:
                        [{
                            "name": "k8s-pod-network",
                            "ips": [
                                "10.42.0.23"
                            ],
                            "default": true,
                            "dns": {}
                        }]
Status:               Pending
IP:
IPs:                  <none>
Controlled By:        ReplicaSet/kubernetes-bootcamp-69b6f9fbb9
Containers:
  kubernetes-bootcamp:
    Container ID:
    Image:          jocatalin/kubernetes-bootcamp:v2
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tzpnr (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  kube-api-access-tzpnr:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason          Age   From               Message
  ----    ------          ----  ----               -------
  Normal  Scheduled       2s    default-scheduler  Successfully assigned default/kubernetes-bootcamp-69b6f9fbb9-rvcz4 to ali1-atlantic-node-3
  Normal  AddedInterface  2s    multus             Add eth0 [10.42.0.23/32] from k8s-pod-network
  Normal  Pulling         1s    kubelet            Pulling image "jocatalin/kubernetes-bootcamp:v2"

查看pods状态

# 有一个pod 终止了
kubectl get pods
NAME                                   READY   STATUS        RESTARTS   AGE
kubernetes-bootcamp-69b6f9fbb9-nkncs   1/1     Running       0          98s
kubernetes-bootcamp-69b6f9fbb9-rvcz4   1/1     Running       0          2m24s
kubernetes-bootcamp-855d5cc575-kxrj6   1/1     Terminating   0          89m

# 活跃的pod变成2个了
kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-69b6f9fbb9-nkncs   1/1     Running   0          2m16s
kubernetes-bootcamp-69b6f9fbb9-rvcz4   1/1     Running   0          3m2s


# event事件
Events:
  Type     Reason          Age                    From               Message
  ----     ------          ----                   ----               -------
  Normal   Scheduled       3m36s                  default-scheduler  Successfully assigned default/kubernetes-bootcamp-69b6f9fbb9-nkncs to ali1-atlantic-host
  Normal   AddedInterface  3m36s                  multus             Add eth0 [10.42.65.180/32] from k8s-pod-network
  Warning  Failed          2m50s (x3 over 3m35s)  kubelet            Failed to pull image "jocatalin/kubernetes-bootcamp:v2": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/jocatalin/kubernetes-bootcamp:v2": failed to copy: httpReadSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/jocatalin/kubernetes-bootcamp/manifests/sha256:fb1a3ced00cecfc1f83f18ab5cd14199e30adc1b49aa4244f5d65ad3f5feb2a5: 429 Too Many Requests - Server message: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
  Warning  Failed          2m50s (x3 over 3m35s)  kubelet            Error: ErrImagePull
  Normal   BackOff         2m13s (x5 over 3m35s)  kubelet            Back-off pulling image "jocatalin/kubernetes-bootcamp:v2"
  Warning  Failed          2m13s (x5 over 3m35s)  kubelet            Error: ImagePullBackOff
  Normal   Pulling         2m2s (x4 over 3m36s)   kubelet            Pulling image "jocatalin/kubernetes-bootcamp:v2"
  Normal   Pulled          2m1s                   kubelet            Successfully pulled image "jocatalin/kubernetes-bootcamp:v2" in 1.066946066s (1.066969801s including waiting)
  Normal   Created         2m1s                   kubelet            Created container kubernetes-bootcamp
  Normal   Started         2m                     kubelet            Started container kubernetes-bootcamp


Verify the update

kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.43.136.101
IPs:                      10.43.136.101
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  32673/TCP
Endpoints:                10.42.0.23:8080,10.42.65.180:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

确认每次curl 都能访问到不同的pod,而且version == V2

export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation # echo "NODE_PORT=$NODE_PORT"
NODE_PORT=32673
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation # echo $NODE_IP
10.224.35.217
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-69b6f9fbb9-rvcz4 | v=2
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-69b6f9fbb9-nkncs | v=2
ali1-atlantic-host:~/k8scluster-automation # curl http://"$NODE_IP:$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-69b6f9fbb9-rvcz4 | v=2

确认roll update state

kubectl rollout status deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp" successfully rolled out

Roll back an update

因为V10不存在,所以这条执行之后,会有个pod 处于error状态,无法pull image

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
deployment.apps/kubernetes-bootcamp image updated
ali1-atlantic-host:~/k8scluster-automation # kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   2/2     1            2           2d6h
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation # kubectl get pods
NAME                                   READY   STATUS         RESTARTS   AGE
kubernetes-bootcamp-66566cb7f-b8qq5    0/1     ErrImagePull   0          13s
kubernetes-bootcamp-69b6f9fbb9-nkncs   1/1     Running        0          9m39s
kubernetes-bootcamp-69b6f9fbb9-rvcz4   1/1     Running        0          10m


kubectl logs kubernetes-bootcamp-66566cb7f-b8qq5
Error from server (BadRequest): container "kubernetes-bootcamp" in pod "kubernetes-bootcamp-66566cb7f-b8qq5" is waiting to start: trying and failing to pull image


查看deployment细节

kubectl describe deployment kubernetes-bootcamp
Name:                   kubernetes-bootcamp
Namespace:              default
CreationTimestamp:      Sun, 21 Jan 2024 22:27:58 -0800
Labels:                 app=kubernetes-bootcamp
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=kubernetes-bootcamp
Replicas:               2 desired | 1 updated | 3 total | 2 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=kubernetes-bootcamp
  Containers:
   kubernetes-bootcamp:
    Image:        gcr.io/google-samples/kubernetes-bootcamp:v10
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    False   ProgressDeadlineExceeded
OldReplicaSets:  kubernetes-bootcamp-855d5cc575 (0/0 replicas created), kubernetes-bootcamp-69b6f9fbb9 (2/2 replicas created)
NewReplicaSet:   kubernetes-bootcamp-66566cb7f (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  38m   deployment-controller  Scaled down replica set kubernetes-bootcamp-855d5cc575 to 2 from 4
  Normal  ScalingReplicaSet  26m   deployment-controller  Scaled up replica set kubernetes-bootcamp-69b6f9fbb9 to 1
  Normal  ScalingReplicaSet  25m   deployment-controller  Scaled down replica set kubernetes-bootcamp-855d5cc575 to 1 from 2
  Normal  ScalingReplicaSet  25m   deployment-controller  Scaled up replica set kubernetes-bootcamp-69b6f9fbb9 to 2 from 1
  Normal  ScalingReplicaSet  24m   deployment-controller  Scaled down replica set kubernetes-bootcamp-855d5cc575 to 0 from 1
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled up replica set kubernetes-bootcamp-66566cb7f to 1

rollback 回去

kubectl rollout undo deployments/kubernetes-bootcamp
deployment.apps/kubernetes-bootcamp rolled back
ali1-atlantic-host:~/k8scluster-automation #
ali1-atlantic-host:~/k8scluster-automation # kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-69b6f9fbb9-nkncs   1/1     Running   0          28m
kubernetes-bootcamp-69b6f9fbb9-rvcz4   1/1     Running   0          28m

clear env 删除deployment 和 service

kubectl get services
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.43.0.1       <none>        443/TCP          6d6h
kubernetes-bootcamp   NodePort    10.43.136.101   <none>        8080:32673/TCP   6h9m
ali1-atlantic-host:~/k8scluster-automation # kubectl delete deployments/kubernetes-bootcamp services/kubernetes-bootcamp
deployment.apps "kubernetes-bootcamp" deleted
service "kubernetes-bootcamp" deleted
ali1-atlantic-host:~/k8scluster-automation # kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   6d6h

kubectl get deployments
No resources found in default namespace.
ali1-atlantic-host:~/k8scluster-automation # kubectl get pods
No resources found in default namespace.

标签:kubectl,Kubernetes,kubernetes,IP,bootcamp,学习,atlantic,整理,ali1
From: https://www.cnblogs.com/vivivi/p/17985936

相关文章

  • OpenMP学习 第九章 通用核心回顾
    第九章通用核心回顾创建线程组:shared(list)private(list)firstprivate(list)default(none)reduction(operator:list)#pragmaompparallel[clause[,clause]...]{//bodyofparallel}共享工作循环构造:private(list)firstprivate(list)nowaitreduct......
  • CV 基础知识学习笔记
    简略记录一下一些基本的CV的知识参考:https://www.bilibili.com/video/BV1q7411T7Y6/输出层计算公式:\(out_{size}=(in_{size}-F_{size}+2P)/S+1\)\(in_{size}\)为输入长度\(F_{size}\)为权重矩阵长度,减掉意义为去掉第一个矩阵长度。\(P\)为padding,即填充长......
  • 【文化课学习笔记】【物理】平衡力学
    【物理】平衡力学重力大小:\(G=m\mathrm{g}\);方向:竖直向下;\(\mathrm{g}\):不是定值,与高度和纬度有关;高度越高,\(\mathrm{g}\)越小;纬度越高,\(\mathrm{g}\)越大。重心:测量方法:悬挂法。规则图形的重心在几何中心。误区:重心不一定在物体上。注意事项:一个装满水的气球下方开......
  • 数论——Pollard-Rho 学习笔记
    数论——Pollard-Rho学习笔记非平凡因数:\(n\)除了\(1\)和\(n\)以外的因数。Pollard-Rho算法是一种用于快速分解非平凡因数的算法。Pollard-Rho能在期望复杂度\(\mathcalO(n^{1/4})\)的时间内找到\(n\)的最小的非平凡因数。而根据Pollard-Rho,我们可以用来加速质......
  • ubuntu学习
    ubuntu是什么Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。*(centos)商业版本以Redhat为代表,开源社区版本则以debian为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用,不能一概而论。下面就这些不同......
  • 微雪ESP32-S3-Zreo学习笔记之USB串口
    软件下载ESP32-S3-Zero没有板载USB转串口,无法实现自动下载。下载软件时要按住Boot按键再上电,此时电脑会识别到一个USB模拟的COM口,可用于下载软件。开发环境编程环境是使用的esp-idf-4.4.2;值得注意的是在此之前安装了esp-idf-5.0.2、esp-idf-5.1.2都不能正常使用,安装好后使......
  • 【linux学习】使用_nmon_工具对系统进行监控
    【linux学习】使用_nmon_工具对系统进行监控原创:厦门微思网络 【微思2002年成立,专业IT认证培训21年!】 我们主要课程:思科、华为、红帽、ORACLE、VMware、CISP、PMP等认证培训及考证。......
  • Oracle数据类型的简单学习之一
    Oracle数据类型的简单学习之一背景因为信创安可替代的发展有很多项目提到了数据库切换到国产数据库的要求.一般情况是要求从Oracle/SQLServer迁移到国产的:达梦/瀚高/人大金仓/南大通用等数据库.但是因为Oracle作为数据库领域No.1的存在他对SQL的规范标准支持的并不......
  • 精通 VS 调试技巧,学习与工作效率翻倍!
    ​✨✨欢迎大家来到贝蒂大讲堂✨✨​......
  • openGauss学习笔记-206 openGauss 数据库运维-常见故障定位案例-too many clients alr
    openGauss学习笔记-206openGauss数据库运维-常见故障定位案例-toomanyclientsalready206.1高并发报错“toomanyclientsalready”或无法创建线程206.1.1问题现象高并发执行SQL,报错“sorry,toomanyclientsalready”;或报无法创建线程、无法fork进程等错误。206.1.2......