k8s的pod分类、核心组件、网络模型、kubectl常用命令
一、Pod基础概念
Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。
- Pod的使用方式
在Kubrenetes集群中Pod有如下两种使用方式:
一个Pod中运行一个容器:"每个Pod中一个容器"的模式是最常见的用法;在这种使用方式中,你可以把Pod想象成是单个容器的封装, kutberentes管理的是Pod而不是直接管理容器。
在一个Pod中同时运行多个容器:一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位,比如一个容器共享文件,另一个"sidecar"容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
一个Pod下的容器必须运行于同一节点上。现代容器技术建议一个容器只运行一个进程,该进程在容器中PTD命令空间中的进程号为1,可直接接收并处理信号,进程终止时容器生命周期也就结束了。若想在容器内运行多个进程,需要有一个类似Linux操作系统init进程的管控类进程,以树状结构完成多进程的生命周期管理。运行于各自容器内的进程无法直接完成网络通信,这是由于容器间的隔离机制导致,k8s中的pod资源抽象正是解决此类问题,Pod对象是一组容器的集合,这些容器共享Network、UTS及IPc命令空间,因此具有相同的域名、主机名和网络接口,并可通过IPC直接通信。
Pod资源中针对各容器提供网络命令空间等共享机制的是底层基础容器pause,基础容器〈也可称为父容器) pause就是为了管理pod容器间的共享操作,这个父容器需要能够准确地知道如何去创建共享运行环境的容器,还能管理这些容器的生命周期。为了实现这个父容器的构想, kubernetes中,用pause容器来作为一个Pod中所有容器的父容器。这个pause容器有两个核心的功能,一是它提供整个Pod的Linux命名空间的基础。二来启用PID命名空间,它在每个Pod中都作为PID为1进程(init进程),并回收僵尸进程。
- Pause容器共享的两种资源
pause容器使得Pod中的所有容器可以共享两种资源: 网络和存储
●网络:
每个Pod都会被分配一个唯一的IP地址。Pod中的所有容器共享网络空间,包括TP地址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。
●存储:
可以Pod指定多个共享的Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。
- Pause容器为业务容器提供的功能
kubernetes中的pause容器主要为每个业务容器提供以下功能:
●在pod中担任Linux命名空间(如网络命令空间)共享的基础;
●启用PID命名空间,开启init进程。
- Pod特殊结构的作用
Kubernetes设计这样的Pod概念和特殊组成结构的作用有以下两点:
原因一:在一组容器作为一个单元的情况下,难以对整体的容器简单地进行判断及有效地进行行动。比如,一个容器死亡了,此时是算整体挂了么?那么引入与业务无关的Pause容器作为Pod的根容器,以它的状态代表着整个容器组的状态,这样就可以解决该问题。
原因二:Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂载的volume,这样简化了业务容器之间的通信问题,也解决了容器之间的文件共享问题。
二、Pod的分类
通常把Pod分为两类:自主式Pod和控制器管理的Pod
自主式Pod
这种Pod本身是不能自我修复的,当Pod被创建后(不论是由你直接创建还是被其他controller),都会被Kuberentes调度到集群的Node 上。直到pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上。Pod不会自愈。如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。
控制器管理的Pod
Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node 上。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod的。
每个Pod都有一个特殊的被称为"根容器"的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。
四、Kubernetes核心组件
Kubernetes中master核心组件
- etcd
- 是Kubernetes的存储状态的数据库(所有master的持续状态都存在etcd的一个实例中);
- 它是一个集群分布式数据库,它可以提供分布式数据的一致性。
- apiserver
- Kubernetes的核心组件是API Server,它是Kubernetes系统和Etcd直接对话的唯一组件
- 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager
- controller manager 是通过API Server 进行协调的组件,绑定到单独的服务器Master上;
- 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler
- scheduler是通过API Server 进行协调的组件,绑定到单独的服务器Master上;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
Kubernetes中Node核心组件
- kubelet(Node Agent)
- kubelet负责管理pods和它们上面的容器,images镜像、volumes、etc。
- Agent负责监视绑定到其节点的一组Pod,并确保这些Pod正常运行,并且能实时返回这些Pod的运行状态。
- Container runtime
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy
- kube-proxy网络代理和负载均衡,负责为Service提供cluster内部的服务发现和负载均衡;
其他组件:
kube-dns负责为整个集群提供DNS服务
Ingress Controller为服务提供外网入口
Heapster提供资源监控
Dashboard提供GUI
Federation提供跨可用区的集群
Fluentd-elasticsearch提供集群日志采集、存储与查询
注: Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
五、Kubernetes网络模型
Kubernetes的网络模型组成
- Pod内部docker容器之间网络通信
- Pod所在的网络之间通信
- Pod和Service之间网络通信
- 外界与Service之间网络通信
Pod内部docker容器之间网络通信
Kubernetes使用了一种“IP-per-pod”网络模型:为每一个Pod分配了一个IP地址,Pod内部的docker容器共享Pod的网络空间,即它们共享Pod的网卡和IP。其原理是根据docker的“container网络”模型而来。
Pod所在的网络之间通信
Kubernetes把各node主机上的docker的bridge网络“外包”给了flannel,然后通过etcd将各node主机上的bridge网络信息收集起来,因此每个node之间的网络使用的是同网络的不同IP,保证了网络通讯的可靠性。其原理是根据docker的“bridge网络”模型而来。
Pod和Service之间网络通信
在Kubernetes体系中Pod是不稳定的,Pod的IP地址会发生变化,所以Kubernetes引进了Service的概念。Service是一个抽象的实体,Kubernetes在创建Service实体时,为其分配了一个虚拟的IP,当外界需要访问Pod里的容器提供的功能时,不直接使用Pod的IP地址和端口,而是访问Service的这个虚拟IP和端口,由Service把请求转发给它背后的Pod。Kubernetes在创建Service时,根据Service的标签选择器(Label Selector)来查找Pod,据此创建与Service同名的EndPoints对象。当Pod的地址发生变化时,EndPoints也随之变化。Service接受到请求时,就能通过EndPoints找到对应的Pod。再深入探究,Service只是一个虚拟的概念,真正完成请求转发的是运行在node节点上的kube-proxy。Service的虚拟IP就是由kube-proxy实现的。kube-proxy有两种请求转发模式:userspace模式和iptables模式。在Kubernetes v1.1版本之前默认是userspace模式,v1.2版本后默认是iptables模式。
补充说明iptables模式:
当创建Service时,所有node节点上的kube-proxy都会建立两级iptables规则,一级为Service创建,目的是将<服务虚拟IP,端口>的流量转给后端,另一级为EndPoints创建,目的是用于选择Pod。当service.spec.sessionAffinity值为”ClientIP”时,iptables模式选择Pod的算法和userspace模式相同(选择与请求来源IP更接近的Pod)。当service.spec.sessionAffinity值为”None”时,随机选择Pod,所以如果被选择的Pod没有响应,不会尝试选择另一个Pod。
外界与Service之间网络通信
①ClusterIP类型,这种类型的Service只会得到虚拟的IP和端口,只能在Kubernetes集群内部被访问,此模型是为默认类型。
②NodePort类型,这种类型的Service除了会得到虚拟的IP和端口,Kubernetes还会在所有node节点上为其分配端口。分配的端口的值可以通过spec.ports[*].nodePort指定,或由Kubernetes在配置好的区间里分配(默认为30000-32767)。这种Service即可以从Kubernetes集群通过虚拟IP:端口访问,也可以从集群外部通过Node节点的IP:nodePort访问。
③LoadBalancer类型,这种类型的Service除了会得到虚拟的IP和端口,Kubernetes还会在所有Node节点上为其分配端口,然后为其开通负载均衡。这种Service即可以从Kubernetes集群通过虚拟IP:端口访问,也可以从集群外部通过node节点的IP:nodePort访问,还可以通过负载均衡的IP访问。
六、kubectl命令使用
kubectl 概述
你可以使用 Kubectl 命令行工具管理 Kubernetes 集群。 kubectl
在 $HOME/.kube
目录中查找一个名为 config
的配置文件。 你可以通过设置 KUBECONFIG 环境变量或设置 --kubeconfig
参数来指定其它 kubeconfig 文件。
本文概述了 kubectl
语法和命令操作描述,并提供了常见的示例。 有关每个命令的详细信息,包括所有受支持的参数和子命令, 请参阅 kubectl 参考文档。 有关安装说明,请参见安装 kubectl 。
语法
使用以下语法 kubectl
从终端窗口运行命令:
kubectl [command] [TYPE] [NAME] [flags]
其中 command
、TYPE
、NAME
和 flags
分别是:
command
:指定要对一个或多个资源执行的操作,例如create
、get
、describe
、delete
。TYPE
:指定资源类型。资源类型不区分大小写, 可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1
NAME
:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息kubectl get pods
。在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:
要按类型和名称指定资源:
要对所有类型相同的资源进行分组,请执行以下操作:
TYPE1 name1 name2 name<#>
。例子:
kubectl get pod example-pod1 example-pod2
分别指定多个资源类型:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
。例子:
kubectl get pod/example-pod1 replicationcontroller/example-rc1
用一个或多个文件指定资源:
-f file1 -f file2 -f file<#>
- 使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。 例子:
kubectl get -f ./pod.yaml
- 使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。 例子:
flags
: 指定可选的参数。例如,可以使用-s
或-server
参数指定 Kubernetes API 服务器的地址和端口。
注意:
从命令行指定的参数会覆盖默认值和任何相应的环境变量。
操作
基础命令:create,delete,get,run,expose,set,explain,edit
get 命令
列出资源
示例
以 ps 输出格式列出所有 pod
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-5667776978-jplsv 1/1 Running 0 13m
apache-5667776978-jq77s 1/1 Running 0 13m
apache-5667776978-ps2nl 1/1 Running 0 13m
test 1/1 Running 0 25m以 ps 输出格式列出所有 pod 并提供更多信息
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
apache-5667776978-jplsv 1/1 Running 0 15m 10.244.1.4 node1.example.com <none> <none>
apache-5667776978-jq77s 1/1 Running 0 15m 10.244.1.5 node1.example.com <none> <none>
apache-5667776978-ps2nl 1/1 Running 0 15m 10.244.2.4 node2.example.com <none> <none>
test 1/1 Running 0 27m 10.244.2.3 node2.example.com <none> <none>以 ps 输出格式列出具有指定 NAME 的单个复制控制器
[root@master ~]# kubectl get deployment apache
NAME READY UP-TO-DATE AVAILABLE AGE
apache 3/3 3 3 16m以 ps 输出格式列出所有 pod和sevice
[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/apache-5667776978-jplsv 1/1 Running 0 20m
pod/apache-5667776978-jq77s 1/1 Running 0 20m
pod/apache-5667776978-ps2nl 1/1 Running 0 20m
pod/test 1/1 Running 0 32mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h以 JSON 输出格式列出单个 Pod
[root@master ~]# kubectl get -o json pod apache-5667776978-ps2nl
{"apiVersion": "v1","kind": "Pod","metadata": {"creationTimestamp": "2021-12-19T07:05:38Z","generateName": "apache-5667776978-","labels": {"app": "apache","pod-template-hash": "5667776978"},
......
create 命令
用于根据文件或输入创建集群resource
常用选项
--image 指定镜像
--replicas 创建指定数目的pod
示例
根据yaml配置文件一次性创建service和rc
kubectl create -f my-service.yaml -f my-rc.yaml
根据目录下所有.yaml、.yml、.json文件的定义进行创建操作
kubectl create -f <directory>
使用nginx镜像创建一个deployment类型名为nginx的pod
[root@master ~]# kubectl create deployment nginx --image nginx
deployment.apps/nginx created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 1m
使用httpd镜像创建三个deployment类型名为apache的pod
[root@master ~]# kubectl create deployment apache --image httpd --replicas 3
deployment.apps/apache created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-5667776978-jplsv 1/1 Running 0 52s
apache-5667776978-jq77s 1/1 Running 0 52s
apache-5667776978-ps2nl 1/1 Running 0 52s
run 命令
类似于docker的run命令,直接运行一个image
常用选项
--image 指定镜像
--port 暴露容器端口
--labels key=value 指定标签
示例
运行一个nginx的pod
[root@master ~]# kubectl run nginx --image nginx
pod/nginx created
[root@master ~]# kubectl run nginx --image nginx
pod/nginx created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 20s
运行一个nginx的pod,标签为app=web
[root@master ~]# kubectl run test --image nginx --port 80 --labels app=web
pod/test created[root@master ~]# kubectl describe pod test
Name: test
Namespace: default
Priority: 0
Node: node2.example.com/192.168.153.167
Start Time: Sun, 19 Dec 2021 14:54:01 +0800
Labels: app=web
Annotations: <none>
Status: Running
IP: 10.244.2.3
IPs:IP: 10.244.2.3
试运行;打印相应的 API 对象而不创建它们
[root@master ~]# kubectl run nginx --image nginx --dry-run=client
pod/nginx created (dry run)
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
**expose **命令
创建一个service服务,并且暴露端口让外部可以访问
常用选项
--port 要映射的宿主机端口--target-port 映射给那个容器端口
示例
[root@master ~]# kubectl expose deployment web --port 8080 --target-port 80
service/web exposed
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web ClusterIP 10.104.77.75 <none> 8080/TCP 25s
[root@master ~]# curl http://10.104.77.75:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
delete 命令
删除pod
#删除具有相同名称myapp的 Pod 和服务
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-96d5df5c8-jqklp 1/1 Running 0 82s
web-96d5df5c8-z4f7r 1/1 Running 0 82s
web-96d5df5c8-zwhhn 1/1 Running 0 82s[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
web ClusterIP 10.98.228.103 <none> 8080/TCP 40s[root@master ~]# kubectl delete svc,deployment web
service "web" deleted
deployment.apps "web" deleted[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGENAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h# 删除标签 app=nginx 的 Pod 和服务
[root@master ~]# kubectl run test --image nginx --labels app=web
pod/test created
[root@master ~]# kubectl run example --image nginx --labels app=web
pod/example created
[root@master ~]# kubectl run qwer --image nginx --labels app=web
pod/qwer created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
example 1/1 Running 0 53s
qwer 1/1 Running 0 59s
test 1/1 Running 0 64s[root@master ~]# kubectl delete pod -l app=web
pod "example" deleted
pod "qwer" deleted
pod "test" deleted[root@master ~]# kubectl get pods
No resources found in default namespace.#删除所有pod
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
example 1/1 Running 0 53s
qwer 1/1 Running 0 59s
test 1/1 Running 0 64s
[root@master ~]# kubectl delete depolyment --all
error: the server doesn't have a resource type "depolyment"
[root@master ~]# kubectl delete deployment --all
deployment.apps "exanple" deleted
deployment.apps "nginx" deleted
deployment.apps "test" deleted[root@master ~]# kubectl get pods
No resources found in default namespace.
describe 命令
显示指定pod的详细信息
[root@master ~]# kubectl describe pod nginx
Name: nginx-6799fc88d8-2zz6l
Namespace: default
Priority: 0
Node: node2.example.com/192.168.153.167
Start Time: Mon, 20 Dec 2021 19:03:29 +0800
Labels: app=nginxpod-template-hash=6799fc88d8
Annotations: <none>
Status: Running
IP: 10.244.2.13
IPs:IP: 10.244.2.13......
edit 命令
编辑资源
#运行一个nginx镜像的pod,名为nginx,定义的标签是app=web
[root@master ~]# kubectl run nginx --image nginx --labels app=web
pod/nginx created[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 2m25s[root@master ~]# kubectl describe pods/nginx
Name: nginx
Namespace: default
Priority: 0
Node: node1.example.com/192.168.153.166
Start Time: Mon, 20 Dec 2021 18:47:45 +0800
Labels: app=web
Annotations: <none>
Status: Running
IP: 10.244.1.12
IPs:IP: 10.244.1.12......# 使用edit命令编辑
[root@master ~]# kubectl edit pods/nginx
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:creationTimestamp: "2021-12-20T10:47:45Z"labels:app: test # 把原本app:web改为app:testname: nginxnamespace: defaultresourceVersion: "18769"uid: cd06bc1d-96f8-4bd4-823f-00f7d567f652
spec:containers:- image: nginx[root@master ~]# kubectl describe pods/nginx
Name: nginx
Namespace: default
Priority: 0
Node: node1.example.com/192.168.153.166
Start Time: Mon, 20 Dec 2021 18:47:45 +0800
Labels: app=test
Annotations: <none>
Status: Running
IP: 10.244.1.12
IPs:IP: 10.244.1.12......
scale 命令
动态扩展
创建一个deployment类型的nginx的pod
[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-2zz6l 1/1 Running 0 91s# 使用scale扩展,将名称为nginx的pod扩展到5个
[root@master ~]# kubectl scale --replicas 5 deployment/nginx
deployment.apps/nginx scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-2zz6l 1/1 Running 0 3m48s
nginx-6799fc88d8-dnf2c 0/1 ContainerCreating 0 3s
nginx-6799fc88d8-dtz75 0/1 ContainerCreating 0 3s
nginx-6799fc88d8-sn9s9 0/1 ContainerCreating 0 3s
nginx-6799fc88d8-znv4r 0/1 ContainerCreating 0 3s
autoscale 命令
自动扩展,给定一个范围,自动根据业务的访问量增加或减少
[root@master ~]# kubectl autoscale --min=2 --max=8 --cpu-percent 60 deployment/nginx
horizontalpodautoscaler.autoscaling/nginx autoscaled
cluster-info 命令
显示集群信息
[root@master ~]# kubectl cluster-info dump |grep hostname"kubernetes.io/hostname": "master.example.com","f:kubernetes.io/hostname": {},"kubernetes.io/hostname": "node1.example.com","f:kubernetes.io/hostname": {},"kubernetes.io/hostname": "node2.example.com","f:kubernetes.io/hostname": {},"--hostname-override=$(NODE_NAME)""--hostname-override=$(NODE_NAME)""--hostname-override=$(NODE_NAME)""--hostname-override=$(NODE_NAME)"
logs 命令
查看日志
[root@master ~]# kubectl logs deployment/nginx
Found 5 pods, using pod/nginx-6799fc88d8-2zz6l
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/12/20 11:03:32 [notice] 1#1: using the "epoll" event method
2021/12/20 11:03:32 [notice] 1#1: nginx/1.21.4
2021/12/20 11:03:32 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2021/12/20 11:03:32 [notice] 1#1: OS: Linux 4.18.0-257.el8.x86_64
2021/12/20 11:03:32 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/12/20 11:03:32 [notice] 1#1: start worker processes
2021/12/20 11:03:32 [notice] 1#1: start worker process 32
2021/12/20 11:03:32 [notice] 1#1: start worker process 33
attach 命令
附加在一个容器里
[root@master ~]# kubectl attach nginx-6799fc88d8-2zz6l
Defaulting container name to nginx.
Use 'kubectl describe pod/nginx-6799fc88d8-2zz6l -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
exec 命令
进到容器内执行一个命令
#不进入容器执行date命令
[root@master ~]# kubectl exec nginx-6799fc88d8-2zz6l -- date
Mon Dec 20 11:41:39 UTC 2021#进入到容器
[root@master ~]# kubectl exec -it nginx-6799fc88d8-2zz6l -- /bin/bash
root@nginx-6799fc88d8-2zz6l:/# ls
bin docker-entrypoint.d home media proc sbin tmp
boot docker-entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
prot-forward 命令
转发一个或多个端口到pod里面去
[root@master ~]# kubectl port-forward deployment/nginx 80
Forwarding from 127.0.0.1:80 -> 80
Forwarding from [::1]:80 -> 80[root@master ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:2381 0.0.0.0:*
LISTEN 0 128 127.0.0.1:80 0.0.0.0:*
.....
[root@master ~]# curl http://127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>#转发任意IP地址的端口到容器的端口
[root@master ~]# kubectl port-forward --address 0.0.0.0 deployment/nginx 80
Forwarding from 0.0.0.0:80 -> 80[root@master ~]# curl 192.168.153.164
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
cp 命令
拷贝文件或目录到容器中,或者从容器内向外拷贝
[root@master ~]# kubectl cp /etc/yum.repos.d/ nginx-6799fc88d8-2zz6l:/tmp
[root@master ~]# kubectl exec -it nginx-6799fc88d8-2zz6l -- /bin/bash
root@nginx-6799fc88d8-2zz6l:/# ll /tmp
bash: ll: command not found
root@nginx-6799fc88d8-2zz6l:/# ls -l /tmp
total 4
drwxr-xr-x 2 root root 4096 Dec 20 11:58 yum.repos.d
root@nginx-6799fc88d8-2zz6l:/#
label
给资源设置、更新标签
#创建一个没有标签的pod
[root@master ~]# kubectl run nginx --image nginx
pod/nginx created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 2s[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5s#添加标签app=test
[root@master ~]# kubectl label --overwrite pod nginx app=test
pod/nginx labeled[root@master ~]# kubectl describe pod nginx
Name: nginx
Namespace: default
Priority: 0
Node: node1.example.com/192.168.153.166
Start Time: Mon, 20 Dec 2021 20:10:18 +0800
Labels: app=testrun=nginx
Annotations: <none>
Status: Running
IP: 10.244.1.16
IPs:IP: 10.244.1.16
......#追加标签
[root@master ~]# kubectl label pod nginx web=nginx
pod/nginx labeled
[root@master ~]# kubectl describe pod nginx
Name: nginx
Namespace: default
Priority: 0
Node: node1.example.com/192.168.153.166
Start Time: Mon, 20 Dec 2021 20:10:18 +0800
Labels: app=testrun=nginxweb=nginx
Annotations: <none>
Status: Running
IP: 10.244.1.16
IPs:IP: 10.244.1.16
......#更改标签
[root@master ~]# kubectl label pod nginx --overwrite web=test
pod/nginx labeled
[root@master ~]# kubectl describe pod nginx
Name: nginx
Namespace: default
Priority: 0
Node: node1.example.com/192.168.153.166
Start Time: Mon, 20 Dec 2021 20:10:18 +0800
Labels: app=testrun=nginxweb=test
Annotations: <none>
Status: Running
IP: 10.244.1.16
IPs:IP: 10.244.1.16
......
api-versions 命令
打印受支持的API版本
[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
extensions/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
使用deploument控制器部署镜像
[root@master ~]# kubectl create deployment nginx --image nginx
deployment.apps/nginx created[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-4wbts 1/1 Running 0 18s
使用Service将pod暴露出去
[root@master ~]# kubectl expose deployment nginx --port 80 --target-port 8080 --type NodePort
service/nginx exposed[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d1h
nginx NodePort 10.106.135.106 <none> 80:30219/TCP 20s
访问应用
[root@master ~]# curl http://192.168.153.164:30219 #端口号随机生成,通过getsvc获取
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
k8s的pod分类、核心组件、网络模型、kubectl常用命令相关推荐
- k8s pod分类、核心组件、网络模型、kubectl常用命令
k8s的pod分类.核心组件.网络模型.kubectl常用命令 K8s基本概念 pod分类 核心组件 K8s的三种网络模型 kubectl常用操作 kubeconfig配置文件 kubectl管理命令 ...
- Kubectl 常用命令, 开发人员常用k8s命令
Kubectl 常用命令: 什么是常用,我用的,就是常用的
- kubernetes基础介绍及kubectl常用命令
kubernetes基础介绍及kubectl常用命令 k8s的pod分类 自主式pod 控制器管理的pod 核心主键 HPA service 网络模型 同节点Pod之间的通信 不同节点上的Pod通信 ...
- kubectl常用命令大全详解
文章目录 说明 基础命令详解:create.delete.get.run.expose.set.explain.edit create 命令:根据文件或者输入来创建资源 创建Deployment和Se ...
- Kubectl 常用命令大全(*)
前言 Kubectl是一个用于操作kubernetes(k8s)集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具. Kubectl 常用 ...
- kubectl常用命令 和 配置
yaml文件大多从已知的yaml的基础上进行修改 kubectl run nginx --image=nginx --dry-run=client -o yaml > pod1.yaml 创建资 ...
- kubectl 常用命令指南
文章目录 一.kubectl管理 1.1 Kubectl 自动补全 1.2 Kubectl 上下文和配置 二 .创建对象和显示和查找资源 2.1 创建对象 2.2 显示和查找资源 四.更新资源和修补资 ...
- kubectl常用命令_《蹲坑学kubernetes》之十五:kubectl命令详解
kubectl用于运行Kubernetes集群命令的管理工具.本章节主要讲了kubectl基本语法和使用方法.在以后的实际工作中,使用越来越多,也会越来越熟悉. 1.kubectl语法 kubectl ...
- 容器技术之kubectl常用命令
kubectl用于运行Kubernetes集群命令的管理工具.本文概述涵盖了kubectl语法,对命令操作的描述,并列举了常用命令. Kubectl命令详细列表请查看:Kubernetes kubec ...
- Kubernetes之kubectl常用命令使用指南:3:故障对应
kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具.这里我们会通过一些简单的实例来展现其中 ...
最新文章
- 14.3.1 调用系统的拍照功能
- Flink1.4.0连接Kafka0.10.2时遇到的问题
- bootstrap-自适应导航
- [Spring cloud 一步步实现广告系统] 22. 广告系统回顾总结
- 在updatepanel中使用fileupload控件
- SQL Server 2017 2019 Linux(Centos、Unbuntu16.04、Unbuntu18.04、Unbuntu20.04)安装过程详解
- NEFU709(第K个圆的半径)
- oracle 如何创建job,oracle创建job
- 分布式ID生成的9种方法,特好用!
- [转载] numpy.logspace和numpy.linspace区别对比
- GStreamer架构设计篇(四)
- Reinforcement Learning by David Silver 学记记录
- 怎么把录音导入库乐队_库乐队导入电脑版 苹果库乐队怎么导入歌
- 学习DSP28335--CCS软件打开例程时一直报错问题以及编译问题解决
- QT 读取txt 文件
- VAST2.0视频广告投放解决方案改变视频网站未来技术格局
- 软件开发培训学校四大培训标准,引领行业标杆
- MySQL连接速度太慢_mysql-连接速度非常慢(1秒)
- DBCO-PEG-TAT DBCO-聚乙二醇-TAT
- Proxmox VE ZFS 开启Thin Provision(精简配置)
热门文章
- PDF转HTML格式怎么转?建议收藏这些方法
- [Openfire]使用WebSocket建立Openfire的客户端
- 总结JS中常用的数组的方法大全
- 【Cocos Creator 实战教程(2)】——天天酷跑(动画、动作相关)
- php需要开启gd服务,中国面积最大的省:总面积超200万平方公里,风景绝美不是新疆!...
- JACK的需求(一)【 测试用例】
- 如果让我重做一次研究生--王泛森院士(转)
- 怒刷九元航空靠窗座位!
- codeigniter mysql_CI框架(CodeIgniter)实现的数据库增删改查操作总结
- 计算机科学与技术专业自荐信,计算机科学与技术专业毕业自荐信范文