Kubernetes Pod入门

什么是Pod

Pod是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及运行规范。在Pod 中,所有容器都被统一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们 的逻辑主机,Pod包含业务相关的多个应用容器。所以,Pod是一组具有共享命名空间、IP地址 和端口的容器的集合。

Pod 的特点:每个 Pod 还包含一个 Pause 容器,Pause 容器是 Pod 的父容器,主要负责僵尸进程的回收管理。通过 Pause 容器可以使同一个 Pod 里面的不同容器共享存储、网络、PID、IPC 等,可以使用 volume 实现数据共享。

Pod 的状态:Pod 的状态有 Running、Pending、Succeeded、Failed、Unknown、ImagePullBackOff、ErrImagePull、CrashLoopBackoff、OOMKilled、Terminating、SysctlForbidden、Completed、ContainerCreating 等。

Pod 探针:Pod 提供的探针可以很方便地用来检测容器的应用是否正常,目前探针有 3 种检测方式,分别是 ExecAction、TCPSocketAction、HTTPGetAction。Pod 探针有三类,分别是 livenessProbe(存活探针)、readinessProbe(就绪探针)、startupProbe(启动探针)。7

Pod 镜像拉取策略和重启策略:镜像拉取策略有 Always、Never、IfNotPresent 三种。重启策略有 Always、OnFailure、Never 三种。

创建一个简单的 Pod:编写 Pod 配置文件,通过 kubectl create 命令创建此 Pod,查看已经创建的 Pod 和 Pod 详细创建信息,最后删除 pod。

Pod 的基本用法:编写 pod 文件,将两个容器放在同一个 pod 中,部署 pod 文件,查看 pod 的详细信息,暴露端口,查看端口映射,测试访问,最后删除 pod。

运行代码

kubect1 get pod nginx -o wide

Pod的状态

kubectl命令创建pod

kubectl run nginx--image=nginx:1.7.9--1abels="app=nginx"

查看pod

kubectl get pods -n default

显示Pod的更多信息

kubect1 get pod nginx -o wide

查看pod日志

cur1 10.244.58.195
kubect1 logs nginx

以yaml格式显示Pod详细信息

kubect1 describe pod nginx

在Pod的容器中执行命令

kubect1 exec nginx-cnginx--date

备注:

kubectl exec -it nginx--bash

如果登录的时候不指定容器,就登录到Pod中的第一个容器中。

在线编辑运行中的资源对象

kubect1 edit pod nginx

将pod的端口映射到宿主机

kubectl port-forward--address 0.0.0.0pod/nginx 8080:80 

注意:

此命令会在前台运行,此时就可以在其他客户端用该k8s主机的IP地址和8080的端口号进行访 问了,Ctr1+c停止,但停止后就没有这个映射了。

在宿主机和Pod的容器之间拷贝文件

kubect1 cp nginx:etc/fstab /opt/aaa.txt
kubectl cp /opt/aaa.txt nginx:etc/bbb.txt

Pod的状态

kubectl get pods -n default

删除Pod

kubect1 delete pod nginx

Pod探针

在生产环境中,进程正常启动并不代表应用能正常处理请求,所以合理的设计应用的健康检 查尤其重要。在使用裸机或裸容器部署时,一般很难对应用做很完善的健康检查,而Pod提供的在生产环境中,进程正常启动并不代表应用能正常处理请求,所以合理的设计应用的健康检 查尤其重要。

实现方式

ExecAction 在容器内执行一个指定的命令,如果命令返回值为0,则认为容器健康

TCPSocketAction 通过TCP连接检查容器指定的端口,如果端口开放,则认为容器健康

HTTPGetAction 对指定的URL进行Get请求,如果状态码在200-400之间,则认为容 器健康

Pod镜像拉取策略和重启策略

指定拉取策略:

kubect1 run nginx--image=nginx:1.7.9--1abels="app=nginx"--iage-pu11-policy=Never

指定重启策略:

kubect1 delete pod nginx
kubect1 run nginx--image=nginx:1.7.9--1abe1s="app=nginx--estrtOnFailure

创建一个简单的Pod

编写一个简单的Pod

vim nginx-pod.yam1

apiVersion: v1
kind:Pod
metadata:
name:nginx
1abels:
name:nginx
spec:
containers :
-name:nginx
image:nginx:1.7.9
ports:
containerPort:80

编写Pod配置文件frontend-localredis-pod.yaml

cat <<EOF>frontend-1ocalredis-pod.yam1
apiVersion: v1
kind:Pod
metadata:
name:redis-php
labels:
name:redis-php
spec:
containers:
-name:frontend
image: kubeguide/guestbook-php-frontend:1ocalredis
imagePul1Policy:IfNotPresent
1ivenessProbe:
tcpSocket:
port:80
initialDelaySeconds: 1
periodSeconds:3
timeoutSeconds:1
ports:
- containerPort:80
- name:redis
image: kubeguide/redis-master
imagePul1Policy: IfNotPresent
ports:
containerPort:6379
restartPolicy:OnFailure
EOF

Pod的基本用法

编写pod文件,将两个容器放在同一个pod中

cat<<EOF>nginx-php.yam1
apiVersion:v1
kind:Pod
metadata:
name:nginx-php
1abels:
name:nginx-php
spec:
containers:
-name:nginx-app
image:nginx:1.7.9
ports:
containerPort:80
name:php-app
image:bitnami/php-fpm
imagePullPolicy: Never
ports:
containerPort:9000
EOF

部署nginx的pod文件

kubect1 apply -f nginx-php.yam1
kubectl get pods

此时可以看到pod中有两个容器处于running状态中

查看pod的详细信息

kubect1 describe pod nginx-php

暴露端口

kubect1 expose pod nginx-php--port=88--target-port=80--type=NodePort--name=nginx-php

查看端口映射

kubectl get pod,svc nginx-php -o wide

测试访问

用外部主机,访问master的ip地址:映射的端口

http://192.168.10.101:32598/

删除pod

kubect1 delete -f nginx-php.yam1

静态pod

静态Pod是由kubelet进行管理的仅存在于各个Node上的Pod。他们不能通过API Server 进行管理,无法于ReplicationController、Deployment或者DaemonSet进行关联,并且 kubelet无法对他们进行健康检查。静态Pod总是由kubelet创建的,并且总在kubelet所在 的Node上运行。

编写yamal文件

cat<<EOF>/etc/kubernetes/manifests/nginx-pod.yam1

apiVersion:v1
kind:Pod
metadata:
name:static-web
1abels:
name:static-web
spec:
containers:
- name:static-web
image:nginx:1.7.9
ports:
-name:nginx
containerPort:80
EOF

不需执行部署命令,过一会,查看pod

kubectl get pod

删除静态pod的方法

rm -rf /etc/kubernetes/manifests/nginx-pod.yam1

不能用如下语句删除

kubectl delete pod static-web-k8s-master01

这样删除,会让pod处于pending状态,但无法删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值