Kubernetes Pod的使用
上一篇文章介绍了k8s的部署,既然部署完成了,我们就来看看如何使用k8s。我们从最基本的概念开始。
k8s管理容器的核心是Pod,我们可以将Pod理解为容器的集合。也就是说,一个Pod中可以部署相关的多个容器,但是一个Pod的功能应该足够独立。打个比方,数据库和我们的Web程序是否应该放置在一个Pod当中吗?我们常规的理解应该是我们的Web程序需要使用数据库,所以应该将其放在一个Pod当中。
但是,我们应该从两者在系统中的作用去考虑,数据库主要提供数据的持久化存储和查询作用,而Web只是提供用户访问数据库的一些接口,从这个角度看,数据库和Web应该放在两个Pod当中,而且如果采用前后端分离的设计,后端和前端也应该放置在两个pod当中,这样,我们在处理负载均衡问题的时候才能区别对待,为前端和后端设定不同的副本数。大部分情况下,一个Pod当中只运行一个容器,我们可以简单地理解为Pod就是k8s对容器的封装,这样才能使k8s使用不同的容器技术,而不仅限于docker。
我们可以使用命令查看当前的Pod及其运行状态:
kubectl get pods
也可以使用简写:
kubectl get po
现在看,我们应该看不到任何的Pod,那是因为我们还没有在默认的命名空间创建任何Pod,可以换一个命令试试
kubectl get po -n kube-system
我们设定了命名空间,这样我们就看到了我们之前部署的k8s系统需要使用的pod。如果希望查看Pod的详细信息,可以使用命令:
kubectl describe pod [pod名称]
Pod的名称是可选的,如果查看全部Pod的详细信息,不加名称即可。
docker为我们提供了logs命令用来查看日志,我们也可以使用kubectl查看Pod的日志:
kubectl logs pod名称
Pod是k8s中管理容器的最基本组件,大部分k8s组件都会和Pod或多或少产生联系。那么如何创建一个Pod呢?很简单,我们这里以wordpress的部署为例,看看如何创建一个Pod,我们需要做的只是编写一个简单的wordpress-pod.yaml文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: wordpress
labels:
app: wordpress
spec:
containers:
- image: wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: ip or FQDN:port
- name: WORDPRESS_DB_USER
value: username
- name: WORDPRESS_DB_PASSWORD
value: password
ports:
- containerPort: 80
name: http
protocol: TCP
apiVersion指定了使用的api版本信息,不同的k8s资源和组件存在于不同的api版本中。kind说明了我们建立的资源类型是一个Pod。metadata是Pod的说明,我们使用了name和labels两个,name指定了Pod的名称,labels是k8s标签,现在没有什么用处,但在以后用处会很大,k8s可以基于标签进行筛选和过滤。
spec主要用来定义容器,我们使用的镜像是wordpress:latest,创建的容器名称为wordpress,env是容器运行时需要设置的环境变量,这里wordpress主要需要设置数据库的主机名,用户名和密码,可以替换为你自己的配置。ports指定了我们容器需要暴露的接口,name是端口的名称,protocol指定了协议类型为TCP。
关于yaml选项有哪些,我们可以使用命令查看:
kubectl explain pod
如果你想继续查看pod中spec下的containers的选项,可以这样:
kubectl explain pod.spec.containers
有了配置文件,我们可以执行命令创建Pod:
kubectl apply -f wordpress-pod.yaml
如果上面命令执行成功,可以使用命令查看一下Pod,如果看到状态是Running,就说明我们的Pod部署成功了,否则可以从日志和详细信息查看一下失败原因。如果命令执行失败,基本是yaml文件编写错误,排查一下问题。
修改一个Pod的配置很容易,只需要修改yaml文件,重新执行上面的命令即可。
如果要删除一个Pod,依然很容易,执行以下命令:
kubectl delete -f wordpress-pod.yaml
再次查看Pod,你会发现Pod经过一系列状态,最后消失了。这样我们就了解了如何创建一个Pod,但是不要高兴的太早,在使用k8s时,我们一般不会直接创建Pod,而且我们现在创建的Pod,在集群外是访问不到的。这就涉及后面的一些内容了。
上一篇: 手动安装python3.6环境
下一篇: TensorFlow2环境安装