说明

  • 从 Kubernetes 1.8 开始,资源使用指标(如容器 CPU 和内存使用率)通过 Metrics API 在 Kubernetes 中获取, metrics-server 替代了heapster。Metrics Server 实现了Resource Metrics API,Metrics Server 是集群范围资源使用数据的聚合器。

  • Metrics Server 从每个节点上的 Kubelet 公开的 Summary API 中采集指标信息。

  • kubernetes metrics server 参考文档https://github.com/kubernetes-incubator/metrics-server

  • 把metric和namespace放在一起说是因为,metric查看使用率的时候会指定命名空间,怕你看不懂。

metrics server

镜像和包下载并上传到服务器

可以自行去网上下载最新的,也可以直接使用我下载好的一个版本【使用方式都是一样的】

k8s_metrics-server包.rar

下载完毕以后上传到主机,一共有2个文件【镜像和包】

[root@master k8s]# ls | grep met
metrics-img.tar
metrics-server-v0.3.6.tar.gz
[root@master k8s]# 

镜像解压【每一个节点】

首先需要把这个镜像拷贝到每一台服务器上【master和node节点】
然后再解压成镜像【每一台都需要解压】

[root@master k8s]# ls | grep met
metrics-img.tar
metrics-server-v0.3.6.tar.gz
[root@master k8s]# 
[root@master k8s]# scp metrics-img.tar node1:~
root@node1's password: 
metrics-img.tar                                        100%   39MB  21.3MB/s   00:01    
[root@master k8s]# scp metrics-img.tar node2:~
root@node2's password: 
metrics-img.tar                                        100%   39MB  21.3MB/s   00:01    
[root@master k8s]# 
[root@master k8s]# docker load -i metrics-img.tar 
932da5156413: Loading layer  3.062MB/3.062MB
7bf3709d22bb: Loading layer  38.13MB/38.13MB
Loaded image: k8s.gcr.io/metrics-server-amd64:v0.3.6
[root@master k8s]# 
[root@master k8s]# docker images |grep metri
k8s.gcr.io/metrics-server-amd64                                   v0.3.6     9dd718864ce6   21 months ago   39.9MB
[root@master k8s]#

# node节点别忘解压啊
[root@node1 ~]# docker load -i metrics-img.tar
932da5156413: Loading layer  3.062MB/3.062MB
7bf3709d22bb: Loading layer  38.13MB/38.13MB
Loaded image: k8s.gcr.io/metrics-server-amd64:v0.3.6
[root@node1 ~]# 
[root@node1 ~]# docker images |grep metri
k8s.gcr.io/metrics-server-amd64                                   v0.3.6     9dd718864ce6   21 months ago   39.9MB
[root@node1 ~]# 

软件包安装【master节点】

  • 看执行的命令,跟着命令做。
[root@master k8s]# tar zxvf metrics-server-v0.3.6.tar.gz
...
[root@master k8s]# cd kubernetes-sigs-metrics-server-d1f4f6f/
[root@master kubernetes-sigs-metrics-server-d1f4f6f]# ls
cmd                 deploy      hack      OWNERS          README.md          version
code-of-conduct.md  Gopkg.lock  LICENSE   OWNERS_ALIASES  SECURITY_CONTACTS
CONTRIBUTING.md     Gopkg.toml  Makefile  pkg             vendor
[root@master kubernetes-sigs-metrics-server-d1f4f6f]# cd deploy/
[root@master deploy]# ls
1.7  1.8+  docker  minikube
[root@master deploy]# cd 1.8+/
[root@master 1.8+]# ls
aggregated-metrics-reader.yaml  metrics-apiservice.yaml         resource-reader.yaml
auth-delegator.yaml             metrics-server-deployment.yaml
auth-reader.yaml                metrics-server-service.yaml
[root@master 1.8+]# 


#注意,当前在这个路径
[root@master 1.8+]# pwd
/k8s/kubernetes-sigs-metrics-server-d1f4f6f/deploy/1.8+
[root@master 1.8+]# 

配置文件修改

[root@master 1.8+]# pwd
/k8s/kubernetes-sigs-metrics-server-d1f4f6f/deploy/1.8+
[root@master 1.8+]# 
[root@master 1.8+]# vim metrics-server-deployment.yaml
# 下面行号中33行imagePullPolicy的值改为IfNotPresent
#并且34-38是新增内容,复制过去即可
...
 33         imagePullPolicy: IfNotPresent
 34         command: 
 35         - /metrics-server 
 36         - --metric-resolution=30s 
 37         - --kubelet-insecure-tls
 38         - --kubelet-preferred-address-types=InternalIP
...

# 修改完成后是这样的
[root@master 1.8+]# cat metrics-server-deployment.yaml | grep -A 6 imagePullPolicy
        imagePullPolicy: IfNotPresent
        command:
        - /metrics-server 
        - --metric-resolution=30s 
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP
        volumeMounts:
[root@master 1.8+]# 

应用修改配置

复制下面的命令即可【.是应用当前位置所有配置文件】

[root@master 1.8+]# pwd
/k8s/kubernetes-sigs-metrics-server-d1f4f6f/deploy/1.8+
[root@master 1.8+]# 
[root@master 1.8+]# kubectl apply -f .
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
Warning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
Warning: apiregistration.k8s.io/v1beta1 APIService is deprecated in v1.19+, unavailable in v1.22+; use apiregistration.k8s.io/v1 APIService
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
[root@master 1.8+]# 

配置文件重命名

不做也可,做了更规范一点,没坏处。

[root@master 1.8+]# pwd
/k8s/kubernetes-sigs-metrics-server-d1f4f6f/deploy/1.8+
[root@master 1.8+]# 
[root@master 1.8+]# cd /k8s
[root@master k8s]# ls | grep kubernetes-sigs-metrics-server-d1f4f6f/
[root@master k8s]# ls | grep kubernetes-sigs-metr
kubernetes-sigs-metrics-server-d1f4f6f
[root@master k8s]# 
[root@master k8s]# mv kubernetes-sigs-metrics-server-d1f4f6f/ metric
[root@master k8s]# 

至此,metrics就配置完成了。

metrics服务状态查看

现在也可以看到metrics的pod状态是running的
命令:kubectl get pods -n kube-system

[root@master k8s]# kubectl get ns
NAME              STATUS   AGE
default           Active   4d3h
kube-node-lease   Active   4d3h
kube-public       Active   4d3h
kube-system       Active   4d3h
[root@master k8s]# kubectl get pods -n kube-system | tail -n 2
kube-scheduler-master                      1/1     Running   12         4d3h
metrics-server-644c7f4f6d-xb9bz            1/1     Running   0          6m39s
[root@master k8s]# 
  • api中也有这个服务
[root@master ~]# kubectl api-versions | grep me
metrics.k8s.io/v1beta1
[root@master ~]# 

测试

查看node及pod监控指标

node:kubectl top nodes
pod:kubectl top pod --all-namespaces

[root@master ~]# kubectl top nodes
W0706 16:03:01.500535  125671 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   319m         7%     1976Mi          53%       
node1    132m         3%     856Mi           23%       
node2    141m         3%     841Mi           22%       
[root@master ~]# 
[root@master ~]# kubectl top pods -n kube-system
W0706 16:03:03.934225  125697 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME                                       CPU(cores)   MEMORY(bytes)   
calico-kube-controllers-78d6f96c7b-p4svs   4m           32Mi            
calico-node-cc4fc                          40m          134Mi           
calico-node-stdfj                          40m          138Mi           
calico-node-zhhz7                          58m          132Mi           
coredns-545d6fc579-6kb9x                   3m           28Mi            
coredns-545d6fc579-v74hg                   3m           19Mi            
etcd-master                                18m          271Mi           
kube-apiserver-master                      66m          387Mi           
kube-controller-manager-master             21m          77Mi            
kube-proxy-45qgd                           1m           25Mi            
kube-proxy-fdhpw                           1m           35Mi            
kube-proxy-zf6nt                           1m           25Mi            
kube-scheduler-master                      4m           35Mi            
metrics-server-bcfb98c76-w87q9             2m           13Mi            
[root@master ~]#

top精简查看

默认执行会有一堆提示,如果不想要这些提示,直接在后面加上参数:--use-protocol-buffers即可【提示中最后有参数说明的哈】

[root@master ~]# kubectl top nodes
W0706 16:45:18.630117   42684 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   317m         7%     1979Mi          53%       
node1    140m         3%     849Mi           23%       
node2    138m         3%     842Mi           22%       
[root@master ~]# 
[root@master ~]# kubectl top nodes --use-protocol-buffers
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   324m         8%     1979Mi          53%       
node1    140m         3%     850Mi           23%       
node2    139m         3%     841Mi           22%       
[root@master ~]#

top中使用率m说明

  • 一核心会分成1000个微核心,一个微核心为1m,如下cpu(cores)中324m就表示324个微核心。
[root@master ~]# kubectl top nodes --use-protocol-buffers
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   324m         8%     1979Mi          53%       
node1    140m         3%     850Mi           23%       
node2    139m         3%     841Mi           22%       
[root@master ~]# 
  • 核心计算百分比方式,需要先知道自己有多少颗cpu,命令:lscpu,一颗cpu是1000微核心,得出总微核心以后就可以计算了,如上master使用了324m,则master的使用率为:
    324/4000*100=8.1%
[root@master ~]# lscpu | grep CPU\(
CPU(s):                4
  • 问题来了,你觉得nodes中已经有CPU的%了,还自己算个der?
    是的,node使用率已经有了,但pod没有,所有pod都需要自己计算的,要知道m这个东西是啥才是最重要的。
[root@master ~]# kubectl top pods -n kube-system 
W0706 16:53:45.335507   52024 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME                                       CPU(cores)   MEMORY(bytes)   
calico-kube-controllers-78d6f96c7b-p4svs   4m           32Mi            
calico-node-cc4fc                          41m          134Mi           
calico-node-stdfj                          56m          137Mi           
calico-node-zhhz7                          55m          133Mi           
coredns-545d6fc579-6kb9x                   4m           27Mi            
coredns-545d6fc579-v74hg                   4m           20Mi            
etcd-master                                18m          269Mi           
kube-apiserver-master                      69m          383Mi           
kube-controller-manager-master             20m          77Mi            
kube-proxy-45qgd                           1m           25Mi            
kube-proxy-fdhpw                           1m           34Mi            
kube-proxy-zf6nt                           1m           26Mi            
kube-scheduler-master                      4m           35Mi            
metrics-server-bcfb98c76-w87q9             1m           13Mi            
[root@master ~]# 

top报错error处理

metrics所有服务状态都正常,但是执行top的时候,就会报如下错误
在这里插入图片描述
这是因为应用修改配置需要时间,还没配置完成了,等待一会即可【前提是保证上面的步骤没有遗漏和配置文件修改正确】。
如果等待时间漫长了依然不行【如果在VMware的虚拟机上,确定本地物理机cpu没有处于满负荷状态(资源管理器查看使用率是不是100%)】,在master节点将metric的tar包放到/root目录下重头开始一遍即可】

namespace【命名空间】

说明

  • Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。这些虚拟集群被称为命名空间。
  • 在一个Kubernetes集群中可以使用namespace创建多个“虚拟集群”,这些namespace之间完全隔离,但可以通过某种方式,让一个namespace中的service可以访问到其他的namespace中的服务,我们在CentOS中部署kubernetes1.6集群的时候就用到了好几个跨越namespace的服务,比如Traefik ingress和kube-systemnamespace下的service就可以为整个集群提供服务,这些都需要通过RBAC定义集群级别的角色来实现。

查看所有Namespace

  • 查看单个:kubectl get namespace 名称【一般不会这么用】
  • 查看全部
    • 方式1:kubectl get ns【缩写】
    • 方式2:kubectl get namespace【全拼,这个namespace可以在后面加s用复数形式】
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   4d8h
kube-node-lease   Active   4d8h
kube-public       Active   4d8h
kube-system       Active   4d8h
ns1               Active   39m
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   4d8h
kube-node-lease   Active   4d8h
kube-public       Active   4d8h
kube-system       Active   4d8h
ns1               Active   39m
[root@master ~]# 
  • Kubernetes以三个初始名称空间开头:

    • default 没有其他命名空间的对象的默认命名空间.
    • kube-system系统创建的对象的命名空间.
    • kube-public此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取.此命名空间主要用于集群使用,关联的一些资源在集群中是可见的并且可以公开读取。此命名空间的公共方面知识一个约定,但不是非要这么要求。
  • 命名空间可以分为两个阶段:

    • Active 当前命名空间正在被使用。
    • Terminating 这个Namespace正在被删除,并且不能用于新对象。

查看namespace对应的label

命令:kubectl get namespaces --show-labels

[root@master ~]# kubectl get namespaces --show-labels 
NAME              STATUS   AGE    LABELS
ccx               Active   8m2s   kubernetes.io/metadata.name=ccx
ccxhero           Active   73s    kubernetes.io/metadata.name=ccxhero,name=ccxhero
default           Active   4d8h   kubernetes.io/metadata.name=default
kube-node-lease   Active   4d8h   kubernetes.io/metadata.name=kube-node-lease
kube-public       Active   4d8h   kubernetes.io/metadata.name=kube-public
kube-system       Active   4d8h   kubernetes.io/metadata.name=kube-system
ns1               Active   60m    kubernetes.io/metadata.name=ns1

查看当前默认namespace

命令:kubectl config get-contexts
结果中 NAMESPACE就是当前所处ns空间了。

root@master ~]# kubectl config  get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   default
[root@master ~]# 

查看单个namespace的详细信息

命令:kubectl describe namespaces 名称

[root@master ~]# kubectl describe namespaces default 
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
[root@master ~]# kubectl describe namespaces kube-system 
Name:         kube-system
Labels:       kubernetes.io/metadata.name=kube-system
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
[root@master ~]# 

创建namespace

方式1,通过文件创建

  • 创建一个名为my-namespace.yaml【可以在任意路径创建,名称自定义,后缀固定】的新YAML文件,其中包含以下内容:
    版本v1自定义,name自定义
    下面这是和命令创建是一摸一样的
[root@master ~]# cat my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
        name: ccx
[root@master ~]# 
  • 但通过配置文件肯定是指定labels的意义更大,创建方式如下。
[root@master ~]# cat my-namespace.yaml 
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "ccxhero",
    "labels": {
      "name": "ccxhero"
    }
  }
}
[root@master ~]#
[root@master ~]# kubectl create -f my-namespace.yaml 
namespace/ccxhero created
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
ccx               Active   7m2s
ccxhero           Active   13s
default           Active   4d8h
kube-node-lease   Active   4d8h
kube-public       Active   4d8h
kube-system       Active   4d8h
ns1               Active   59m
  • 查看其对应的labels。
[root@master ~]# kubectl get namespaces --show-labels 
NAME              STATUS   AGE    LABELS
ccx               Active   8m2s   kubernetes.io/metadata.name=ccx
ccxhero           Active   73s    kubernetes.io/metadata.name=ccxhero,name=ccxhero
default           Active   4d8h   kubernetes.io/metadata.name=default
kube-node-lease   Active   4d8h   kubernetes.io/metadata.name=kube-node-lease
kube-public       Active   4d8h   kubernetes.io/metadata.name=kube-public
kube-system       Active   4d8h   kubernetes.io/metadata.name=kube-system
ns1               Active   60m    kubernetes.io/metadata.name=ns1
[root@master ~]# 
  • 然后通过一条命令生成
[root@master ~]# kubectl apply -f ./my-namespace.yaml 
namespace/ccx created
[root@master ~]# 
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
ccx               Active   9s
default           Active   4d8h
kube-node-lease   Active   4d8h
kube-public       Active   4d8h
kube-system       Active   4d8h

方式2,通过命令创建

  • 语法:
kubectl create namespace <create-name> 
  • 如,现在创建一个ccx1的空间
[root@master ~]# kubectl create namespace ccx1
namespace/ccx1 created
[root@master ~]# 
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
ccx               Active   2m13s
ccx1              Active   7s
default           Active   4d8h
  • 可以加上一个-f参数,类似于强制创建,如:
    kubectl create -f namespace ccx1

删除Namespace

  • 注:谨慎删除命名空间,删除前先执行:kubectl get pods -n 需要删除的ns先确定里面是否有pod或已有pod是否不需要了,因为删除ns后,里面的pod会一并被删除,不可恢复。
  • 语法:
kubectl delete namespaces <insert-some-namespace-name>
  • 如,我现在删除ccx1的空间
[root@master ~]# 
[root@master ~]# kubectl delete namespaces ccx1
namespace "ccx1" deleted
[root@master ~]# 
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
ccx               Active   3m44s
default           Active   4d8h

在指定命名空间上部署应用

说明

  • 下面这是官方英文文档,我也是翻译里面的内容,跟着做的而已。
    部署流程

  • 语法

kubeclt create deployment 自定义pod名称 --image=镜像仓库名称 -n=命名空间名称 --replicas=自定义副本数

#镜像仓库查看
[root@master ~]# docker images | grep ng
nginx                                                             latest     d1a364dc548d   6 weeks ago     133MB
[root@master ~]#

# 命名空间查看
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
ccx               Active   15h
ccxhero           Active   15h
default           Active   5d
kube-node-lease   Active   5d
kube-public       Active   5d
kube-system       Active   5d
ns1               Active   16h
[root@master ~]# 

#副本数
--replicas=这参数可以不要,默认是1,如果--replicas==2,则会创建2个该pod。

创建示例

  • 如,我在ccx命名空间里创建一个nginx,副本数为2的pod
# 创建前是空的
[root@master ~]# kubectl get pod -n ccx
No resources found in ccx namespace.
[root@master ~]# 
[root@master ~]# kubectl create deployment nginx-test --image=nginx -n=ccx --replicas=2
deployment.apps/nginx-test created
[root@master ~]#
  • 创建成功后如下
    因为我指定了2个副本数,所以会有2个pod生成
[root@master ~]# kubectl get pod -n ccx
NAME                          READY   STATUS             RESTARTS   AGE
nginx-test-795d659f45-j9m9b   0/1     ImagePullBackOff   0          6s
nginx-test-795d659f45-txf8l   0/1     ImagePullBackOff   0          6s
[root@master ~]#

Kubernetes pod状态为ImagePullBackOff处理方法

  • 可以看到我上面创建的2个pod的STATUS状态不是Running的,而是ImagePullBackOff,下面我们开始处理该错误。
  • 流程
    • 1、查看该命名空间下pod状态为ImagePullBackOff的NAME名称
      kubectl get pods -n ccx【ccx是命名空间名称】
    • 2、查看该pod的详细信息
      kubectl describe pod -n ccx nginx-test-795d659f45-j9m9b【ccx后面就是通过第一步获取的NAME】
  • 如下,我创建的nginx-test就是错误的,查看流程如下
    执行第二步以后就会打印所有信息,下面中会有error原因,原因各有不同,跟着报错原因做即可,因为我的是在内网环境,没有外网,没有配置镜像源,无法下载依赖,我可以手动复制下面报错中给出的网址,去一个外网上docker pull获取相关依赖镜像,导入即可,但我不想折腾,就不演示了,你只要会处理流程就行了。
    如果你是机子是通外网的,最简单的方法就是配置好阿里源,执行systemctl daemon-reload,systemctl restart docker,问题就解决了【我博客docker分类中有配置阿里源的方法】
[root@master ~]# kubectl get pods -n ccx
NAME                          READY   STATUS             RESTARTS   AGE
nginx-test-795d659f45-j9m9b   0/1     ImagePullBackOff   0          34m
nginx-test-795d659f45-txf8l   0/1     ImagePullBackOff   0          34m
[root@master ~]# 
[root@master ~]# kubectl describe pod -n ccx nginx-test-795d659f45-j9m9b
Name:         nginx-test-795d659f45-j9m9b
Namespace:    ccx
Priority:     0
Node:         node2/192.168.59.144
Start Time:   Wed, 07 Jul 2021 09:48:15 +0800
Labels:       app=nginx-test
              pod-template-hash=795d659f45
Annotations:  cni.projectcalico.org/podIP: 10.244.104.2/32
              cni.projectcalico.org/podIPs: 10.244.104.2/32
Status:       Pending
IP:           10.244.104.2
IPs:
  IP:           10.244.104.2
Controlled By:  ReplicaSet/nginx-test-795d659f45
Containers:
  nginx:
    Container ID:   
    Image:          nginx
    Image ID:       
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vmhjt (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-vmhjt:
    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  34m                    default-scheduler  Successfully assigned ccx/nginx-test-795d659f45-j9m9b to node2
  Warning  Failed     34m                    kubelet            Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:55518->[::1]:53: read: connection refused
  Warning  Failed     34m                    kubelet            Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:39653->[::1]:53: read: connection refused
  Warning  Failed     33m                    kubelet            Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:40238->[::1]:53: read: connection refused
  Warning  Failed     33m (x6 over 34m)      kubelet            Error: ImagePullBackOff
  Warning  Failed     32m (x4 over 34m)      kubelet            Error: ErrImagePull
  Normal   Pulling    32m (x4 over 34m)      kubelet            Pulling image "nginx"
  Warning  Failed     32m                    kubelet            Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:37451->[::1]:53: read: connection refused
  Normal   BackOff    4m16s (x132 over 34m)  kubelet            Back-off pulling image "nginx"
[root@master ~]# 

kubens工具的使用

下载并拷贝到bin目录

[root@master k8s]# ls| grep kubens
kubens
[root@master k8s]# chmod +x kubens
[root@master k8s]# mv kubens /bin/
[root@master k8s]# 

使用说明

kubens:列出当前上下文中的名称空间

正常情况下这是会列出你所有的命名空间的,并且当前所属空间颜色会被标黑或加深,但我这不知道为啥,显示不出。

[root@master ~]# kubens
[root@master ~]# 
  • 并且脚本中的值单独执行是能获取的
    不过没关系哈,切换这是可以正常使用的。
[root@master ~]#  kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'
}ccx
ccxhero
default
kube-node-lease
kube-public
kube-system
ns1
[root@master ~]# }
  • 我们是可以通过命令查看默认ns和所有ns的
root@master ~]# kubectl config  get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   default
[root@master ~]# 
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   4d8h
kube-node-lease   Active   4d8h
kube-public       Active   4d8h
kube-system       Active   4d8h
ns1               Active   26m
kubens <NAME>:更改当前上下文的活动命名空间
  • 如我现在是在默认空间default里面,是无法直接执行pod的,然后我直接切换到kube-system里面,即可看到现在所有pod了
[root@master ~]# kubectl config  get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   default
[root@master ~]# 
[root@master ~]# kubectl get pods
No resources found in default namespace.
[root@master ~]#
[root@master ~]# kubens kube-system
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "kube-system".
[root@master ~]# 
[root@master ~]# kubectl get pods
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-78d6f96c7b-p4svs   1/1     Running   0          4d7h
calico-node-cc4fc                          1/1     Running   18         4d6h
calico-node-stdfj                          1/1     Running   20         4d7h
calico-node-zhhz7                          1/1     Running   1          4d7h
coredns-545d6fc579-6kb9x                   1/1     Running   0          4d8h
coredns-545d6fc579-v74hg                   1/1     Running   0          4d8h
etcd-master                                1/1     Running   1          4d8h
kube-apiserver-master                      1/1     Running   1          4d8h
kube-controller-manager-master             1/1     Running   11         4d8h
kube-proxy-45qgd                           1/1     Running   1          4d6h
kube-proxy-fdhpw                           1/1     Running   1          4d8h
kube-proxy-zf6nt                           1/1     Running   1          4d7h
kube-scheduler-master                      1/1     Running   12         4d8h
metrics-server-bcfb98c76-w87q9             1/1     Running   0          123m
[root@master ~]# 
kubens -:切换到此上下文中的上一个命名空间
  • 我上面是已经切换到kube-system空间中了,现在我直接执行kubens -就可以回到上一个空间了
[root@master ~]# kubens -
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "default".
[root@master ~]# 
[root@master ~]# kubectl get pods
No resources found in default namespace.
[root@master ~]# 

可以看到执行命令后回到了默认的default空间。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐