前言
上一篇简单介绍了K8S中的组件,以及组件之间的联系。这篇就来详细的说说K8S是如何对Pod进行管理编排的。
Ubuntu上安装K8S有比较多的问题,centos7.0可以直接yum install
。我直接在katacoda测试运行。
Pod的简介
通常不同的容器利用cgroup
、namespace
来进行网络磁盘的划分,而Pod让在处在相同Pod的容器有相同的IP。它们使用相同的网络namespace
(换句话说,相同的IP地址和端口空间)。
Pod使您可以以一个单元的模式管理几个紧密耦合的应用程序容器。
Pod在K8S主要有两种形态,普通Pod和静态Pod。静态Pod即不通过K8S调度和创建,直接在某个具体的Node机器上通过具体的文件来启动。普通Pod则是由K8S创建、调度,同时数据存放在etcd中。
静态Pod
静态Pod不能通过API Server进行管理,可以使用kubectl get pod查看,但是删除修改等操作是不允许的。
静态Pod无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet也无法对他们进行健康检查。静态Pod总是由kubectl(kubectl是K8S命令行工具)进行创建。
创建静态 Pod 有两种方式:配置文件和 HTTP 两种方式
配置文件
配置文件就是放在特定目录下的标准的 JSON 或 YAML 格式的 pod 定义文件。启动kubelet
进程,kubelet 定期的去扫描这个目录,根据这个目录下出现或消失的 YAML/JSON 文件来创建或删除静态 pod。
通过 HTTP 创建静态 Pods
kubelet 周期地从–manifest-url=
参数指定的地址下载文件,并且把它翻译成 JSON/YAML 格式的 pod 定义。此后的操作方式与–pod-manifest-path=
相同,kubelet 会不时地重新下载该文件,当文件变化时对应地终止或启动静态 pod。
关于静态Pod的详细介绍可以点击这篇博客。
普通的Pod
进入katacoda首先启动minikube:
1 | $ minikuber start |
创建Pod资源文件:
1 | $ vim pod.yaml |
填入以下数据,简单来说这个就是Pod的描述文件。里面填写了Pod的元数据,元数据包括Pod名、标签、注释等。以及该Pod含有的容器信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14apiVersion: v1
kind: Pod
metadata:
name: tomcatandmysql
spec:
restartPolicy: OnFailure
containers:
- name: tomcat
image: "tomcat:8.0"
- name: mysql
image: "mysql:5.7"
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
下面是对pod.yam
l的详细说明,因为复制带有注释的会导致创建的时候出现问题,所以使用上面没带注释的。
1 | apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . |
创建Pod:
1 | $ kubectl create -f pod.yaml |
查看pod的的信息,可以看到该pod的两个容器还在creating中。过一段时间再查看可以看到来个容器都处于READY的状态了。
可以看到当前的正在运行的容器,的确可以看到:
Pod操作命令
删除Pod
1 | $ kubectl delete pod tomcatandmysql |
查看Pod详细信息
1 | $ kubectl describe pod tomcatandmysql |
还可以看到pod的的事件信息
Pod logs
查看一个Pod的某个容器日志信息:
1 | $ kubectl logs tomcatandmysql mysql #kubectl logs <podname> <imagename> |
kubectl exec
进入到某个Pod,默认进入到第一个容器中:
1 | $ kubectl exec -it tomcatandmysql /bin/bash |