大家好,上篇文章咱们进行了对pod、node、namespace的基础认知和操作,相信大家都已经知道怎么在工作中使用这些命令,那么今天咱们继续学习kubernets知识
操作了pod之后,我想大家一定会有一些疑问,我该怎能才能创建属于自己的pod,那么这节咱们就一起创建第一个pod
Kubernetes 跟 Docker 等很多项目最大的不同,就在于它不推荐你使用命令行的方式直接运行容器(虽然 Kubernetes 项目也支持这种方式,比如:kubectl run),而是希望你用 YAML 文件的方式,即:把容器的定义、参数、配置,统统记录在一个 YAML 文件中,然后用这样一句指令把它运行起来:
kubectl create -f 我的配置文件
这么做最直接的好处是,你会有一个文件能记录下 Kubernetes 到底“run”了什么。比如下面这个例子:
像这样的一个 YAML 文件,对应到 Kubernetes 中,就是一个 API Object(API 对象)。当你为这个对象的各个字段填好值并提交给 Kubernetes 之后,Kubernetes 就会负责创建出这些对象所定义的容器或者其他类型的 API 资源。
kubectl api-versions
这个 YAML 文件中的 Kind 字段,指定了这个 API 对象的类型(Type),是一个 Deployment。
Deployment,是一个定义多副本应用(即多个副本 Pod)的对象,Deployment 还负责在 Pod 定义发生变化时,对每个副本进行滚动更新(Rolling Update)
在上面这个 YAML 文件中,我给它定义的 Pod 副本个数 (spec.replicas) 是:1。
我定义了一个 Pod 模版(spec.template),这个模版描述了我想要创建的 Pod 的细节。在上面的例子里,这个 Pod 里只有一个容器,这个容器的镜像(spec.containers.image)是 nginx:1.7.9,这个容器监听端口(containerPort)是 80
Labels 就是一组 key-value 格式的标签。而像 Deployment 这样的控制器对象,就可以通过这个 Labels 字段从 Kubernetes 中过滤出它所关心的被控制对象
在上面这个 YAML 文件中,Deployment 会把所有正在运行的、携带“app: nginx”标签的 Pod 识别为被管理的对象,并确保这些 Pod 的总数严格等于1个
而这个过滤规则的定义,是在 Deployment 的“spec.selector.matchLabels”字段。我们一般称之为:Label Selector
一个 Kubernetes 的 API 对象的定义,大多可以分为 Metadata 和 Spec 两个部分。前者存放的是这个对象的元数据,对所有 API 对象来说,这一部分的字段和格式基本上是一样的;而后者存放的,则是属于这个对象独有的定义,用来描述它所要表达的功能
创建一个deployment
kubectl create -f nginx_deployment.yaml
查看创建的pod
kubectl get pods -l app=nginx
查看创建的nginx pod描述
kubectl describe pod nginx-deployment-5754944d6c-fmdhr
更新pod,比如咱们要更新nginx到1.8
修改文件中
Image: 1.8
Kubectl apply -f nginx_deployment.yaml
查看nginx版本,已经变更为1.8版本
kubectl describe pod nginx-deployment-6f655f5d99-46fxq
现在咱们进入pod,写些自己的内容
kubectl exec -it nginx-deployment-5754944d6c-6k8qc /bin/bash
ls /usr/share/nginx/html
curl 172.20.0.143
查看到服务发布内容变成hello~
开放端口,查看