一、Pod基础概念

Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等。

  1. 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进程),并回收僵尸进程。

  1. Pause容器共享的两种资源

pause容器使得Pod中的所有容器可以共享两种资源: 网络和存储

●网络:
每个Pod都会被分配一个唯一的IP地址。Pod中的所有容器共享网络空间,包括TP地址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。
●存储:
可以Pod指定多个共享的Volume。Pod中的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。
  1. Pause容器为业务容器提供的功能

kubernetes中的pause容器主要为每个业务容器提供以下功能:

●在pod中担任Linux命名空间(如网络命令空间)共享的基础;
●启用PID命名空间,开启init进程。
  1. 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核心组件

  1. etcd
  • 是Kubernetes的存储状态的数据库(所有master的持续状态都存在etcd的一个实例中);
  • 它是一个集群分布式数据库,它可以提供分布式数据的一致性。
  1. apiserver
  • Kubernetes的核心组件是API Server,它是Kubernetes系统和Etcd直接对话的唯一组件
  • 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  1. controller manager
  • controller manager 是通过API Server 进行协调的组件,绑定到单独的服务器Master上;
  • 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  1. scheduler
  • scheduler是通过API Server 进行协调的组件,绑定到单独的服务器Master上;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;

Kubernetes中Node核心组件

  1. kubelet(Node Agent)
  • kubelet负责管理pods和它们上面的容器,images镜像、volumes、etc。
  • Agent负责监视绑定到其节点的一组Pod,并确保这些Pod正常运行,并且能实时返回这些Pod的运行状态。
  1. Container runtime
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  1. 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的网络模型组成

  1. Pod内部docker容器之间网络通信
  2. Pod所在的网络之间通信
  3. Pod和Service之间网络通信
  4. 外界与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]

其中 commandTYPENAMEflags 分别是:

  • command:指定要对一个或多个资源执行的操作,例如 creategetdescribedelete

  • 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
  • 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常用命令相关推荐

  1. k8s pod分类、核心组件、网络模型、kubectl常用命令

    k8s的pod分类.核心组件.网络模型.kubectl常用命令 K8s基本概念 pod分类 核心组件 K8s的三种网络模型 kubectl常用操作 kubeconfig配置文件 kubectl管理命令 ...

  2. Kubectl 常用命令, 开发人员常用k8s命令

    Kubectl 常用命令: 什么是常用,我用的,就是常用的

  3. kubernetes基础介绍及kubectl常用命令

    kubernetes基础介绍及kubectl常用命令 k8s的pod分类 自主式pod 控制器管理的pod 核心主键 HPA service 网络模型 同节点Pod之间的通信 不同节点上的Pod通信 ...

  4. kubectl常用命令大全详解

    文章目录 说明 基础命令详解:create.delete.get.run.expose.set.explain.edit create 命令:根据文件或者输入来创建资源 创建Deployment和Se ...

  5. Kubectl 常用命令大全(*)

    前言 Kubectl是一个用于操作kubernetes(k8s)集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具. Kubectl 常用 ...

  6. kubectl常用命令 和 配置

    yaml文件大多从已知的yaml的基础上进行修改 kubectl run nginx --image=nginx --dry-run=client -o yaml > pod1.yaml 创建资 ...

  7. kubectl 常用命令指南

    文章目录 一.kubectl管理 1.1 Kubectl 自动补全 1.2 Kubectl 上下文和配置 二 .创建对象和显示和查找资源 2.1 创建对象 2.2 显示和查找资源 四.更新资源和修补资 ...

  8. kubectl常用命令_《蹲坑学kubernetes》之十五:kubectl命令详解

    kubectl用于运行Kubernetes集群命令的管理工具.本章节主要讲了kubectl基本语法和使用方法.在以后的实际工作中,使用越来越多,也会越来越熟悉. 1.kubectl语法 kubectl ...

  9. 容器技术之kubectl常用命令

    kubectl用于运行Kubernetes集群命令的管理工具.本文概述涵盖了kubectl语法,对命令操作的描述,并列举了常用命令. Kubectl命令详细列表请查看:Kubernetes kubec ...

  10. Kubernetes之kubectl常用命令使用指南:3:故障对应

    kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具.这里我们会通过一些简单的实例来展现其中 ...

最新文章

  1. 14.3.1 调用系统的拍照功能
  2. Flink1.4.0连接Kafka0.10.2时遇到的问题
  3. bootstrap-自适应导航
  4. [Spring cloud 一步步实现广告系统] 22. 广告系统回顾总结
  5. 在updatepanel中使用fileupload控件
  6. SQL Server 2017 2019 Linux(Centos、Unbuntu16.04、Unbuntu18.04、Unbuntu20.04)安装过程详解
  7. NEFU709(第K个圆的半径)
  8. oracle 如何创建job,oracle创建job
  9. 分布式ID生成的9种方法,特好用!
  10. [转载] numpy.logspace和numpy.linspace区别对比
  11. GStreamer架构设计篇(四)
  12. Reinforcement Learning by David Silver 学记记录
  13. 怎么把录音导入库乐队_库乐队导入电脑版 苹果库乐队怎么导入歌
  14. 学习DSP28335--CCS软件打开例程时一直报错问题以及编译问题解决
  15. QT 读取txt 文件
  16. VAST2.0视频广告投放解决方案改变视频网站未来技术格局
  17. 软件开发培训学校四大培训标准,引领行业标杆
  18. MySQL连接速度太慢_mysql-连接速度非常慢(1秒)
  19. DBCO-PEG-TAT DBCO-聚乙二醇-TAT
  20. Proxmox VE ZFS 开启Thin Provision(精简配置)

热门文章

  1. PDF转HTML格式怎么转?建议收藏这些方法
  2. [Openfire]使用WebSocket建立Openfire的客户端
  3. 总结JS中常用的数组的方法大全
  4. 【Cocos Creator 实战教程(2)】——天天酷跑(动画、动作相关)
  5. php需要开启gd服务,中国面积最大的省:总面积超200万平方公里,风景绝美不是新疆!...
  6. JACK的需求(一)【 测试用例】
  7. 如果让我重做一次研究生--王泛森院士(转)
  8. 怒刷九元航空靠窗座位!
  9. codeigniter mysql_CI框架(CodeIgniter)实现的数据库增删改查操作总结
  10. 计算机科学与技术专业自荐信,计算机科学与技术专业毕业自荐信范文