4-kubectl工具使用

<文章感谢 xingdian >

kubectl工具使用

一:基本使用

1.查看pod

[root@master ~]# kubectl get pods -n kube-system
NAME          READY   STATUS    RESTARTS   AGE
coredns-f9fd979d6-9t6l5      1/1     Running   0          3h32m
coredns-f9fd979d6-tq89x     1/1     Running   0          3h32m
etcd-master         1/1     Running   0          3h32m
kube-apiserver-master       1/1     Running   0          3h32m
kube-controller-manager-master 1/1   Running   1          3h23m
kube-flannel-ds-amd64-8r4vk 1/1     Running   0          3h29m
kube-flannel-ds-amd64-mj6jf  1/1     Running   0          3h31m
kube-flannel-ds-amd64-pwmjd  1/1     Running   0          3h29m
kube-proxy-4zgnb   1/1     Running   0          3h21m
kube-proxy-8kxfl    1/1     Running   0          3h22m
kube-proxy-fxk72   1/1     Running   0          3h21m
kube-scheduler-master   1/1     Running   0          3h23m
metrics-server-799d467fd5-thq78   1/1  Running   0  3h6m

2.查看异常pod信息:


[root@master ~]# kubectl describe pods kube-flannel-ds-amd64-pwmjd -n kube-system
Name:         kube-flannel-ds-amd64-pwmjd
Namespace:    kube-system
Priority:     0
Node:         node-2/10.0.1.12
Start Time:   Tue, 20 Oct 2020 14:32:10 +0800
Labels:       app=flannel
              controller-revision-hash=76ccd4ff4f
              pod-template-generation=1
              tier=node
Annotations:  <none>
Status:       Running
IP:           10.0.1.12
IPs:
  IP:           10.0.1.12
Controlled By:  DaemonSet/kube-flannel-ds-amd64
....

3.查看节点:

[root@master ~]# kubectl get nodes -n kube-system
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   3h38m   v1.19.3
node-1   Ready    <none>   3h35m   v1.19.3
node-2   Ready    <none>   3h34m   v1.19.3

4.查看集群信息

[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://10.0.1.10:6443
KubeDNS is running at https://10.0.1.10:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://10.0.1.10:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
注意:加dump显示详细内容

5.查看service信息

[root@master ~]# kubectl get services
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP      10.96.0.1       <none>        443/TCP        25h
nginx-deployment   LoadBalancer   10.107.237.33   <pending>     80:31266/TCP   4h13m

6.查看所有名称空间内的资源

[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE              NAME                                          READY   STATUS    RESTARTS   AGE
default                nginx-deployment-585449566-9459t              1/1     Running   0          5h5m
default                nginx-deployment-585449566-z6qs8              1/1     Running   0          5h
default                nginx-xingdian                                1/1     Running   0          4h33m
kube-system            coredns-f9fd979d6-9t6l5                       1/1     Running   0          25h
kube-system            coredns-f9fd979d6-tq89x                       1/1     Running   0          25h
kube-system            etcd-master                                   1/1     Running   0          25h
kube-system            kube-apiserver-master                         1/1     Running   0          25h
kube-system            kube-controller-manager-master                1/1     Running   2          24h
kube-system            kube-flannel-ds-amd64-8r4vk                   1/1     Running   0          24h
kube-system            kube-flannel-ds-amd64-mj6jf                   1/1     Running   0          25h
kube-system            kube-flannel-ds-amd64-pwmjd                   1/1     Running   0          24h
kube-system            kube-proxy-4zgnb                              1/1     Running   0          24h
kube-system            kube-proxy-8kxfl                              1/1     Running   0          24h
kube-system            kube-proxy-fxk72                              1/1     Running   0          24h
kube-system            kube-scheduler-master                         1/1     Running   1          24h
kube-system            metrics-server-799d467fd5-thq78               1/1     Running   0          24h
kubernetes-dashboard   kubernetes-dashboard-699759bf-8jkgn           1/1     Running   0          24h
kubernetes-dashboard   kubernetes-metrics-scraper-864b4f5d68-j825l   1/1     Running   0          24h
monitoring             prometheus-core-7d5cf5dd-vmrwr                0/1     Pending   0          22h

7.总结

Basic Commands (Beginner): 基本命令(初学者):

create 创建从文件或stdin创建资源

expose 公开获取控制器、服务、部署或pod

Kubernetes Service:Kubernetes服务:

run Run a particular image on the cluster

set Set specific features on objects

Basic Commands (Intermediate):基本命令(中级):

explain 解释资源文档

get 获取显示一个或多个资源

edit 编辑编辑服务器上的资源

delete 删除按文件名、stdin、资源和名称,或按资源和标签删除资源

Deploy Commands:部署命令:

rollout 卷展管理资源的卷展

scale 缩放设置部署、复制集或复制控制器的新大小

autoscale 自动缩放自动缩放部署、复制集或复制控制器

Cluster Management Commands:群集管理命令:

certificate 证书修改证书资源

cluster-info 集群信息显示集群信息

top 最高显示资源(CPU/内存/存储)使用率

cordon 警戒线将节点标记为不可调度

uncordon 未关联将节点标记为可调度

taint 污染更新一个或多个节点上的污染

Troubleshooting and Debugging Commands:疑难解答和调试命令:

describe 描述显示特定资源或资源组的详细信息

logs logs打印pod中容器的日志

attach 连接到正在运行的容器上

exec 在容器中执行命令

port-forward 端口转发将一个或多个本地端口转发到机架

proxy 代理运行kubernetesapi服务器的代理

cp cp在容器之间复制文件和目录

auth 授权检查授权

Advanced Commands:高级命令:

diff 实时版本与应用版本的差异

apply 应用按文件名或stdin对资源应用配置

patch 使用策略合并修补程序的资源的修补程序更新字段

replace 替换用文件名或stdin替换资源

wait 等待一个或多个资源上的特定条件

convert 在不同的API版本之间转换转换转换配置文件

kustomize kustomize从目录或远程url构建kustomization目标

Settings Commands:设置命令:

label 标签更新资源上的标签

annotate 批注更新资源上的批注

completion 完成输出指定shell(bash或zsh)的shell完成代码

Other Commands:其他命令:

alpha Commands for features in alpha

api-resources Print the supported API resources on the server

api-versions Print the supported API versions on the server, in the form of “group/version”

config Modify kubeconfig files

plugin Provides utilities for interacting with plugins.

version Print the client and server version information

命令说明
create使用文件或者标准输入的方式创建一个资源
run创建并运行一个或多个容器镜像
set配置应用资源
explain显示资源文档信息
get获取显示一个或多个资源
edit编辑服务器上定义的资源
delete按文件名、stdin、资源和名称或按资源和标签选择器删除资源

二:实验案例

1.创建一个包含nginx服务的pod并运行

[root@master ~]# kubectl run nginx-xingdian --image=daocloud.io/library/nginx:latest --port=80
--image:指定镜像
--port:指定端口 

2.查看创建的pod:

[root@master ~]# kubectl get pods
NAME              READY   STATUS    RESTARTS   AGE
nginx-xingdian   1/1     Running   0          12m

3.创建完成后查看详细信息:

[root@master ~]#  kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP   NODE NOMINATED NODE   READINESS GATES
nginx-xingdian   1/1     Running   0          13m     10.244.1.3   node-1   <none>           <none>

4.在kubernetes集群内任意节点访问该nginx服务:

[root@master ~]# curl 10.244.1.3
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
....

5.创建与管理service:

将pod创建完成后,访问该pod内的服务只能在集群内部通过pod的的地址去访问该服务;当该pod出现故障后,该pod的控制器会重新创建一个包括该服务的pod,此时访问该服务须要获取该服务所在的新的pod的地址去访问。对此,可以创建一个service,当新的pod的创建完成后,service会通过pod的label连接到该服务,只需通过service即可访问该服务。

注意:在K8S v1.18.0以后,–replicas已弃用 ,推荐用 deployment 创建 pods.

创建pod

[root@master nginx]# cat nginx-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
[root@master nginx]# kubectl create -f nginx-deploy.yaml
[root@master nginx]# kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
nginx-deployment-585449566-9459t1/1 Running   0    3m49s
nginx-deployment-585449566-pn8w5 1/1Running   0  3m49s

模拟删除pod

[root@master ~]# kubectl delete pod nginx-xingdian

删除pod后,查看pod信息时发现有创建了一个新的pod

[root@master nginx]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx-deployment-585449566-9459t   1/1 Running   0  5m39s
nginx-deployment-585449566-z6qs8   1/1  Running   0   18s

6.暴露服务

[root@master nginx]# kubectl expose deployment nginx-deployment --port=80 --type=LoadBalancer

查看服务状态(查看对外的端口):

[root@master nginx]# kubectl get services
NAME   TYPE CLUSTER-IP    EXTERNAL-IP   PORT(S)  AGE
kubernetes   ClusterIP  10.96.0.1   <none>   443/TCP   20h
nginx-deployment LoadBalancer   10.107.237.33 <pending>     80:31266/TCP 6m1s

可以看到把端口分配给了31266,找到服务对应运行的节点,使用http://ip:31266进行访问

img

三:使用扩展

1.pod标签

作用:

解决同类型的资源对象越来越多,为了更好的管理,按照标签分组;

常见标签:

release(版本):stable(稳定版)、canary(金丝雀版本、可以理解为测试版)、beta(测试版)

environment(环境变量):dev(开发)、qa(测试)、production(生产)

application(应用):ui、as(应用软件)、pc、sc

tier(架构层级):frontend(前端)、backend(后端)、cache(缓存、隐藏)

partition(分区):customerA(客户A)、customerB(客户B)

track(品控级别):daily(每天)、weekly(每周)

K8s集群中虽然没有对有严格的要求,但是标签还是要做到:见名知意!方便自己也方便别人!

使用:

为现有的pod添加一个标签

[root@master nginx]# kubectl label pod nginx-xingdian app=nginx -n default
pod/nginx-xingdian labeled
注意:
-n: 指定namespect名字空间

查看pod标签

[root@master nginx]# kubectl get pods  --show-labels -n default
NAME      READY   STATUS    RESTARTS   AGE   LABELS
nginx-deployment-585449566-9459t   1/1     Running   0          99m   app=nginx,pod-template-hash=585449566
nginx-deployment-585449566-z6qs8   1/1     Running   0          94m   app=nginx,pod-template-hash=585449566
nginx-xingdian   1/1     Running   0    67m  app=nginx,run=nginx-xingdian

删除标签

[root@master nginx]# kubectl label pod nginx-xingdian app- -n default
pod/nginx-xingdian labeled

修改标签

[root@master nginx]# kubectl label pod nginx-xingdian release=stable -n default
pod/nginx-xingdian labeled
[root@master nginx]# kubectl get pods --show-labels -n default
NAME                               READY   STATUS    RESTARTS   AGE    LABELS
nginx-deployment-585449566-9459t   1/1     Running   0          112m   app=nginx,pod-template-hash=585449566
nginx-deployment-585449566-z6qs8   1/1     Running   0          106m   app=nginx,pod-template-hash=585449566
nginx-xingdian                     1/1     Running   0          80m    app=xingdian,release=stable,run=nginx-xingdian
[root@master nginx]# kubectl label pod nginx-xingdian release=beta --overwrite -n default
pod/nginx-xingdian labeled
[root@master nginx]# kubectl get pods --show-labels -n default
NAME                               READY   STATUS    RESTARTS   AGE    LABELS
nginx-deployment-585449566-9459t   1/1     Running   0          112m   app=nginx,pod-template-hash=585449566
nginx-deployment-585449566-z6qs8   1/1     Running   0          107m   app=nginx,pod-template-hash=585449566
nginx-xingdian                     1/1     Running   0          81m    app=xingdian,release=beta,run=nginx-xingdian

标签与标签选择器的关系:

如果标签有多个,标签选择器选择其中一个,也可以关联成功!

如果选择器有多个,那么标签必须满足条件,才可关联成功!

标签选择器:标签的查询过滤条件

基于等值关系的(equality-based):”=“、”==“、”!=“前两个等于,最后一个不等于

基于集合关系(set-based):in、notin、exists三种;

使用标签选择器的逻辑:

同时指定的多个选择器之间的逻辑关系为”与“操作;

使用空值的标签选择器意味着每个资源对象都将被选择中;

空的标签选择器无法选中任何资源;

2.node节点标签

查看标签

[root@master nginx]# kubectl get nodes --show-labels
NAME     STATUS   ROLES    AGE   VERSION   LABELS
master   Ready    master   22h   v1.19.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node-1   Ready    <none>   22h   v1.19.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-1,kubernetes.io/os=linux
node-2   Ready    <none>   22h   v1.19.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-2,kubernetes.io/os=linux

增加标签

[root@master nginx]# kubectl label nodes node-1 kubernetes.io/username=xingdian
node/node-1 labeled

减少标签

[root@master nginx]# kubectl label nodes node-1 a-
node/node-1 labeled

修改标签

[root@master nginx]# kubectl label nodes node-1 kubernetes.io/username=diandian --overwrite
node/node-1 labeled

/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-2,kubernetes.io/os=linux


增加标签

```bash
[root@master nginx]# kubectl label nodes node-1 kubernetes.io/username=xingdian
node/node-1 labeled

减少标签

[root@master nginx]# kubectl label nodes node-1 a-
node/node-1 labeled

修改标签

[root@master nginx]# kubectl label nodes node-1 kubernetes.io/username=diandian --overwrite
node/node-1 labeled

<文章感谢 xingdian >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值