文章目录
主要内容
- Sidecar类型容器
- Static Pod
- Pod 删除
一. Sidecar类型容器
Sidecar容器是一种特殊类型的容器,它与主应用容器运行在同一个Pod中,并且共享同一个网络和存储空间。Sidecar容器的存在是为了提供附加的功能、辅助服务或者扩展主应用容器的功能。
以下是Sidecar容器的一些特点和用途:
-
附加功能:Sidecar容器可以为主应用容器提供附加的功能和服务,例如日志收集、监控、安全代理、负载均衡、缓存、数据同步等。
-
共享资源:Sidecar容器与主应用容器共享同一个Pod的网络和存储空间,它们可以通过共享的卷(Volume)进行数据交换。
-
解耦和复用:通过将附加功能和服务放入Sidecar容器中,可以将主应用容器与这些功能和服务进行解耦,使得主应用容器更加轻量化和专注于核心业务逻辑。此外,相同的Sidecar容器可以被多个主应用容器复用。
-
生命周期:Sidecar容器的生命周期与主应用容器的生命周期是一致的,它们具有相同的重启策略和资源限制。
-
管理和监控:Sidecar容器可以独立地进行管理和监控,可以通过kubectl命令获取它们的状态和日志。
总之,Sidecar容器是与主应用容器共享同一个Pod的特殊类型的容器,用于提供附加的功能、辅助服务或者扩展主应用容器的功能。它们共享资源,解耦和复用,具有相同的生命周期,并可以独立地进行管理和监控。
1.Sidecar类型容器
代码如下(示例):
cat > sidecar.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: sidecarpod
spec:
containers:
- name: httpd
image: httpd
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /usr/local/apache2/htdocs/
name: sidecarvolume
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo "Hello Sidecar!" > /usr/local/apache2/htdocs/index.html && sleep 3600']
volumeMounts:
- mountPath: /usr/local/apache2/htdocs/
name: sidecarvolume
restartPolicy: OnFailure
volumes:
- name: sidecarvolume
emptyDir: {}
EOF
kubectl create -f sidecar.yml
kubectl get -f sidecar.yml -o wide
上述命令使用kubectl命令行工具创建一个包含Sidecar容器的Pod,并查看Pod的详细信息。下面是对每个命令的详细解释:
1. `cat > sidecar.yml <<EOF`: 这个命令用于将下面的内容输入到名为"sidecar.yml"的文件中。
2. `apiVersion: v1`: 这是Pod配置文件的API版本。
3. `kind: Pod`: 这是要创建的资源类型,这里是一个Pod。
4. `metadata: name: sidecarpod`: 这里指定了Pod的名称为"sidecarpod"。
5. `spec: containers: - name: httpd`: 这里定义了一个容器,名称为"httpd"。
6. `image: httpd`: 这是容器使用的镜像名称,这里使用的是httpd镜像。
7. `imagePullPolicy: IfNotPresent`: 这个字段指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。
8. `volumeMounts: - mountPath: /usr/local/apache2/htdocs/ name: sidecarvolume`: 这个字段定义了容器的挂载路径和挂载卷的名称。
9. `- name: busybox`: 这是第二个容器的名称。
10. `image: busybox`: 这是第二个容器使用的镜像名称,这里使用的是busybox镜像。
11. `command: ['sh', '-c', 'echo "Hello Sidecar!" > /usr/local/apache2/htdocs/index.html && sleep 3600']`: 这是第二个容器的启动命令,这里使用的是一个简单的shell命令,将"Hello Sidecar!"写入到index.html文件中并休眠3600秒。
12. `volumeMounts: - mountPath: /usr/local/apache2/htdocs/ name: sidecarvolume`: 这个字段定义了容器的挂载路径和挂载卷的名称。
13. `restartPolicy: OnFailure`: 这个字段定义了Pod的重启策略,在容器失败时重启Pod。
14. `volumes: - name: sidecarvolume emptyDir: {}`: 这个字段定义了一个空目录卷,并指定了卷的名称为"sidecarvolume"。
15. `kubectl create -f sidecar.yml`: 这个命令使用kubectl工具,根据sidecar.yml文件中的配置创建一个带有Sidecar容器的Pod。
16. `kubectl get -f sidecar.yml -o wide`: 这个命令使用kubectl工具,获取sidecar.yml文件中定义的Pod的详细信息,并使用wide输出格式显示。
总之,上述命令使用kubectl命令行工具创建一个带有Sidecar容器的Pod,并通过指定的配置文件定义了Pod的名称、容器的配置和卷的配置。然后,使用kubectl工具获取并显示Pod的详细信息。
二.Static Pod
不同于与由控制面管理的 Pod(例如,Deployment),静态 Pod 是在指定的节点上由 kubelet 守护进程直接管理,不需要 API 服务器监管。
静态 Pod 始终会绑定到一个指定节点上的 Kubelet,kubelet 会尝试通过 Kubernetes API 服务器为每个静态 Pod 自动创建一个 mirror Pod,这就意味着节点上运行的静态 Pod对 API 服务来说是可见的,但是不能通过 API 服务器来控制。
静态 Pod 名称会把所运行的节点主机名作为后缀。
Static Pod是一种特殊类型的Pod,它不是由Kubernetes的API服务器动态创建和管理的,而是直接在节点上静态配置的Pod。这意味着Static Pod的生命周期与其所在节点的生命周期密切相关,当节点启动时,Static Pod会自动启动;当节点关闭时,Static Pod也会被终止。
以下是Static Pod的一些特点和用途:
-
静态配置:Static Pod的配置文件直接存放在节点的特定目录下,通常是
/etc/kubernetes/manifests
。Kubelet进程会监视该目录,并根据配置文件启动和管理Static Pod。 -
节点级别:Static Pod是与节点一一对应的,每个节点上可以配置一个或多个Static Pod。这些Pod只能在所在节点上运行,无法迁移到其他节点。
-
简化管理:Static Pod的管理不依赖于Kubernetes的API服务器,可以减少对集群的依赖性。这对于一些关键组件的部署非常有用,例如kubelet、kube-proxy等。
-
优先级:由于Static Pod的配置文件直接存放在节点上,它们的启动顺序可以优先于其他由API服务器创建的Pod。这可以确保一些关键组件在集群启动时优先启动。
-
限制:Static Pod没有与其他Pod共享资源的能力,它们不能使用共享卷(Volume)或者网络服务。它们只能访问它们所在节点上的本地资源。
总之,Static Pod是一种直接在节点上静态配置的Pod,它的生命周期与节点的生命周期密切相关。Static Pod的配置文件存放在节点的特定目录下,可以简化管理和优先启动。然而,Static Pod无法与其他Pod共享资源,只能访问本地节点上的资源。
1.Static Pod
代码如下(示例):
首先查看以下静态 Pod 的运行位置:
systemctl status kubelet
tail /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
grep -i static /var/lib/kubelet/config.yaml
ls -l /etc/kubernetes/manifests
上述命令用于检查和获取有关Kubernetes集群的一些配置信息。下面是对每个命令的详细解释:
1. `systemctl status kubelet`: 这个命令用于检查kubelet服务的状态。kubelet是Kubernetes集群中的一个重要组件,负责管理和维护节点上的容器。
2. `tail /etc/systemd/system/kubelet.service.d/10-kubeadm.conf`: 这个命令用于查看kubelet服务的配置文件。在这个文件中,可以找到kubelet服务的启动参数和配置。
3. `grep -i static /var/lib/kubelet/config.yaml`: 这个命令用于在kubelet的配置文件中查找包含"static"关键字的配置项。这个命令可能会显示与集群网络相关的静态配置。
4. `ls -l /etc/kubernetes/manifests`: 这个命令用于列出Kubernetes集群中的manifest文件的详细信息。manifest文件是用来定义和部署Kubernetes资源的配置文件,包括Pod、Service、Deployment等。
总之,上述命令用于检查和获取有关Kubernetes集群的一些配置信息,包括kubelet服务的状态、配置文件的内容以及集群中的manifest文件。这些信息对于诊断和调试Kubernetes集群非常有用。
2.Static Pod
代码如下(示例):
cat > static.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: staticpod
spec:
containers:
- name: hello
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo "Hello, Static Pod!" && sleep 3600']
restartPolicy: OnFailure
EOF
cp static.yml /etc/kubernetes/manifests/
kubectl get pod
kubectl logs staticpod-cka-master
上述命令用于创建一个静态Pod,并查看Pod的状态和日志。下面是对每个命令的详细解释:
1. `cat > static.yml <<EOF`: 这个命令用于创建一个名为static.yml的文件,并将后续输入的内容写入该文件。EOF是一个标记,表示输入结束。
2. `apiVersion: v1`: 这是Pod对象的API版本。
3. `kind: Pod`: 这是定义Pod对象的类型,这里是一个Pod。
4. `metadata`: 这是Pod对象的元数据。
5. `name: staticpod`: 这是Pod的名称,这里设置为staticpod。
6. `spec`: 这是Pod的规格,包含了容器和重启策略等信息。
7. `containers`: 这是容器的列表。
8. `- name: hello`: 这是容器的名称,这里设置为hello。
9. `image: busybox`: 这是容器使用的镜像名称,这里使用的是busybox镜像。
10. `imagePullPolicy: IfNotPresent`: 这个字段指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。
11. `command: ['sh', '-c', 'echo "Hello, Static Pod!" && sleep 3600']`: 这是容器的启动命令,这里使用的是一个简单的shell命令,打印"Hello, Static Pod!"并休眠3600秒。
12. `restartPolicy: OnFailure`: 这个字段定义了Pod的重启策略,在容器失败时重启Pod。
13. `cp static.yml /etc/kubernetes/manifests/`: 这个命令将static.yml文件复制到/etc/kubernetes/manifests/目录下。这个目录是Kubernetes用来自动部署静态Pod的目录。
14. `kubectl get pod`: 这个命令用于获取当前集群中的所有Pod的状态。
15. `kubectl logs staticpod-cka-master`: 这个命令用于获取指定Pod的日志。这里的staticpod-cka-master是Pod的名称。
总之,上述命令使用kubectl命令行工具创建一个静态Pod,并将其配置文件复制到Kubernetes的manifests目录中。然后,使用kubectl工具获取并显示所有Pod的状态,并获取指定Pod的日志。静态Pod是直接在节点上创建和管理的Pod,不受Kubernetes控制平面的管理。
3.Static Pod
代码如下(示例):
rm -rf /etc/kubernetes/manifests/static.yml
kubectl get pod
上述命令用于删除静态Pod的配置文件,并查看Pod的状态。下面是对每个命令的详细解释:
1. `rm -rf /etc/kubernetes/manifests/static.yml`: 这个命令用于删除/etc/kubernetes/manifests/目录下的static.yml文件。这个文件是之前创建的静态Pod的配置文件。
2. `kubectl get pod`: 这个命令用于获取当前集群中的所有Pod的状态。由于之前的静态Pod的配置文件已被删除,所以这个命令将不再显示该Pod的状态。
总之,上述命令用于删除之前创建的静态Pod的配置文件,并使用kubectl命令获取并显示所有Pod的状态。由于静态Pod的配置文件已被删除,所以该Pod将不再存在于集群中。
三.Pod 删除
在计算机科学中,Pod(亦称为Kubernetes Pod)是Kubernetes中最小的可部署和可管理的单元。它是一个或多个紧密关联的容器的组合,它们共享网络和存储资源,并在同一主机上运行。Pod提供了一种逻辑上隔离的环境,使容器能够共同协作。
要删除一个Pod,你可以执行以下步骤:
-
使用命令
kubectl get pods
获取当前所有运行的Pod列表,并找到要删除的Pod的名称。 -
执行以下命令来删除Pod:
kubectl delete pod <pod名称>
替换
<pod名称>
为你要删除的Pod的实际名称。 -
稍等片刻,Kubernetes将处理删除Pod的请求。你可以使用
kubectl get pods
命令来验证Pod是否已成功删除。
请注意,删除Pod将导致其中的容器停止运行并释放资源。当删除Pod时,Kubernetes将尝试自动创建一个新的Pod来代替被删除的Pod,以保持所需的副本数。
1.Pod 删除
代码如下(示例):
kubectl delete pod –all
kubectl get pod
上述命令用于删除所有的Pod,并查看Pod的状态。下面是对每个命令的详细解释:
1. `kubectl delete pod –all`: 这个命令用于删除所有的Pod。`–all`参数表示删除所有的Pod,不管它们的状态如何。
2. `kubectl get pod`: 这个命令用于获取当前集群中的所有Pod的状态。由于之前的所有Pod都已被删除,所以这个命令将不会显示任何Pod的状态。
总之,上述命令用于删除所有的Pod,并使用kubectl命令获取并显示所有Pod的状态。由于所有的Pod都已被删除,所以集群中将不再存在任何Pod。
总结
以上是今天要讲的内容,学到了Sidecar类型容器;Static Pod;Pod 删除。