目录
http://k8s.driverzeng.com/v1.19/
不同资源清单用---进行隔离
---
命名空间
# 资源清单创建
apiVersion: "v1"
kind: "Namespace"
metadata:
name: zls // 创建命名空间的名称
# 命令创建
kubectl create namespace 666
# 查看
[root@master-1 ~]# kubectl get namespaces
NAME STATUS AGE
666 Active 5s
# 删除
[root@master-1 ~]# kubectl delete namespaces 666
peployment
1. 一个pod里创建多个容器
apiVersion: apps/v1 // 要使用kubernetes的版本
kind: Deployment // [1]要创建对象类型
metadata: // 源数据
name: mysql // 名称
namespace: he // 指定命名空间
spec: // 规范说明
replicas: 1 // 要创建几个容器
selector: // Pod 的选择器
matchLabels: // 匹配选定的标签
app: mysql // 指定pod的标签
template: // 定义pod
metadata:
labels: // 打pod的标签()
app: mysql // pod的标签
spec:
containers: // 容器列表
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent // [2]拉取镜像规则
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123"
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wp-
- name: MYSQL_PASSWORD
value: "123"
args: // 传参
- --character-set-server=utf8 // 数据库的默认字符集
- --collation-server=utf8_general_ci // 数据库的默认规则(ci不区分大小写)
volumeMounts: // 容器位置
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
# volumes: // nfs 挂载示例
# - name: wp-data // 给这个起个名字
# nfs: // 使用nfs服务
# path: /data/wordpress // nfs上的目录,服务要挂载到的
# server: 172.16.1.7 // nfs的ip
------
# volumes: // pvc 挂载示例
# - name: wp-data // 名字(和之前的写法略微不同,这个是没有空格)
# persistentVolumeClaim: // 使用pvc服务
# claimName: wp-pvc // pvc服务的名字
## wordpress连接数据库
env:
- name: WORDPRESS_DB_HOST
value: mysql // 填写的是mysql的service的名字
[2]:
imagePullPolicy:镜像拉取策略:
Always:总是拉取镜像 nginx:latest
Never:永远不拉镜像
IfNotPresent:如果镜像在机器上不存在,则拉,否则不拉
资源限制
apiVersion: v1
kind: Pod
metadata:
name: resource-demo
spec:
containers:
- name: resource-demo
image: nginx
ports:
- containerPort: 80
resources:
requests: // 要启动容器需要的资源,至少
memory: 50Mi // 内存,50mi
cpu: 1500m // cpu:1500(1.5核)
limits: // 一个容器最大能使用的资源,最大
memory: 100Mi // 内存,100mi
cpu: 200m // cpu(0.2核)
service
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
type: NodePort // [1]随机分配端口(默认ClusterIP)
sessionAffinity: ClientIP // [2]会话保持
selector:
app: wordpress // 指定pod的标签
ports:
- name: http // 起个名字
protocol: TCP // 端口的协议
port: 80 // service的端口,(ClusterIP)
targetPort: http // 把流量转发到http,可端口80
# nodePort: 30003 // 指定的端口(加不加都可以,加的话需要,随机分配端口,30000-32767)
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
# 解释
selector:选择器部分,用于选择要路由流量的 Pod。
run: php-apache:选择具有标签 run: php-apache 的 Pod。
[1]
ExternalName
ClusterIP // 用来动态发现和负载均衡POD的IP(一般都用这个,搭配infress来对外提供服务)(默认)
NodePort // 节点对外提供访问的IP
LoadBalancer
“ExternalName”映射到指定的externalName。
[2]
None:默认值。不使用会话保持,负载均衡器基于客户端 IP 地址和端口将连接路由到后端 Pod。
ClientIP:根据客户端 IP 地址对连接进行哈希处理,并将其路由到相应的后端 Pod。这种类型的会话保持适用于需要将连接路由到同一台服务器上的长时间连接应用程序。
[root@master-1 mysql]# kubectl describe svc mysql
ingress
[root@master-1 ingress]# cat nginx-in.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: welcom-to-nginx
spec:
rules: // #转发规则
- host: www.zls.com // #匹配的域名
http: // #基于http协议解析
paths: // #基于路径进行匹配
- path: / // #匹配/路径
pathType: ImplementationSpecific // #[1]路径类型
backend: // #匹配后跳转的后端服务
service: // #设置后端跳转到Service的配置
name: nginx-svc // #跳转到标签名为nginx-svc的ClusterIP
port: // #跳转到的端口
number: 80 // #Service端口号
[1]
pathType路径类型支持的类型:
ImplementationSpecific 系统默认,由IngressClass控制器提供
Exact 精确匹配URL路径,区分大小写
Prefix 匹配URL路径的前缀,区分大小写
hpa
apiVersion: "autoscaling/v1"
kind: "HorizontalPodAutoscaler"
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10 // 指定允许的最大副本数量
minReplicas: 1 // 指定允许的最小副本数量
scaleTargetRef:
apiVersion: apps/v1 // 目标对象的 API 版本
kind: Deployment // #目标对象的类型
name: wordpress // #目标对象的名称,这里是一个名为 "wordpress" 的 Deployment。(不是pod的名称)
targetCPUUtilizationPercentage: 50 // #指定期望的目标 CPU 利用率百分比
健康探针
containers:
- name: liveness
livenessProbe:
httpGet:
path: / // #指定要发送 GET 请求的路径.在此示例中,使用的路径是根路径 "/",即容器的根目录
port: 80 // #指定要发送请求到的端口号
initialDelaySeconds: 3 // #初始化延迟时间,表示在容器启动后等待多长时间开始进行第一次存活探测。在此示例中,延迟时间为 3 秒。
periodSeconds: 1 // #存活探测的间隔时间,表示每隔多长时间进行一次存活探测。在此示例中,间隔时间为 1 秒