序言
在大部分的k8s教程中,都是先讲k8s的基本理论,对于刚刚接触k8s的同学来说,可能一脸懵逼,望而生畏,所以我带领大家一步步动手部署,在部署的过程中一步步教大家理解其中的概念,让更多的技术人员迈入k8s的大门。
还没有安装k8s环境的可以参考我之前发布的文章:
《从零开始,带你一步步如何用kubeadm安装k8s》
工作目录:
/data:工作的主目录
/data/yaml:放置yaml文件
使用到的镜像:
nginx:1.15.11
php:7.2-fpm
一、让我们认识k8s的Pod
1.1 部署第一个pod
在大部分web应用中都离不开nginx,所以我们先从部署一个nginx开始我们的k8s奇妙之旅。
新建yaml文件
vi app-v1.yaml
apiVersion: v1kind: Podmetadata: name: my-app-v1spec: containers: - name: my-nginx image: nginx:1.15.11 ports: - containerPort: 80
创建我们的第一个pod
kubectl create -f app-v1.yaml
查看我们刚刚建立的pod
kubectl get pod
接下来让我们解析下上述yaml文件的含义:
apiVersion,指定api版本,我们可以通过kubectl api-versions命令从我们的k8s集群中获取
kind,资源类型,这里我们创建的是一个Pod资源,这里资源类型可以是 Deployment、Job、Ingress、Service、ConfigMap 等(我们后续都会讲解)
metadata:包含了我们定义的 Pod 的一些 meta 信息,比如名称、namespace、标签等等
spec:包括一些 containers,storage,volumes,或者其他 Kubernetes 需要知道的参数,以及诸如是否在容器失败时重新启动容器的属性
请大家记住一个完整的yaml文件必须包含apiVersion、kind、metadata、spec这四个元素。
1.2.1 YAML文件的格式
它的基本语法规则如下:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略。
在我们的 kubernetes 中,只需要两种结构类型就行了:
Lists
Maps
也就是说,你可能会遇到 Lists 的 Maps 和 Maps 的 Lists,等等。不过不用担心,你只要掌握了这两种结构也就可以了,其他更加复杂的我们暂不讨论。
Maps
首先我们来看看 Maps,我们都知道 Map 是字典,就是一个key:value
的键值对,Maps 可以让我们更加方便的去书写配置信息,例如:
---apiVersion: v1kind: Pod
第一行的---
是分隔符ÿ