目录
案例:自主式创建service并关联上面的pod
案例:部署redis
案例:部署myapp
案例:部署MySQL数据库
总结
1.K8S集群中访问流向
K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport
2.语法格式
3.yaml文件组成部署
4.常用字段的含义
案例:自主式创建service并关联上面的pod
资源名称:my-nginx-kkk
命名空间:my-kkk
容器镜像:nginx:1.21
容器端口:80
标签:njzb: my-kkk
创建 server去关联上面的pod
结果:首先修改页面:tian wai lai wu,对外访问,输入地址就能访问
1. 试创建文件获取模板文件
kubectl create ns my-kkk --dry-run -oyaml
kubectl run my-nginx-kkk --image=nginx:1.21 --port=80 --dry-run -oyaml > pod.yaml 

2. 编写yaml文件
kubectl get svc
kubectl get svc nginx -oyaml 

vim pod.yaml 
kubectl apply -f pod.yaml 
kubectl get svc,pod -n my-kkk
 

将获取的yaml资源内容复制过来,进行修改
vim pod.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: my-kkk
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    njzb: my-kkk
  name: my-nginx-kkk
  namespace: my-kkk
spec:
  containers:
  - image: nginx:1.21
    name: my-nginx-kkk
    ports:
    - containerPort: 80
  restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  labels:
    njzb: my-kkk
  name: my-nginx-kkk
  namespace: my-kkk
spec:
  ports:
  - nodePort: 31111  ###节点端口号
    port: 80         ###服务暴露端口
    protocol: TCP    ###通信协议
    targetPort: 80   ###要转发到的容器端口
  selector:
    njzb: my-kkk     ###该服务所选择的后端pod
  type: NodePort
 
3. 测试结果

案例:部署redis
[root@master01 demo]# vim redis.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-dpm
  labels:
    app: redis
spec:               ###资源所需参数
  replicas: 1
  selector:
    matchLabels:
        app: redis   ###只会与标签app:redis的pod关联
  template:          ###业务模板,如果有多个副本,所有副本属性会按照模板进行匹配
    metadata:
      labels:
        app: redis
    spec:           ###资源所需参数
      containers:
      - name: redis
        image: redis:latest
        ports:
        - containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
  name: redis-dbm
  labels:
    app: redis
spec:
  selector:
    app: redis
  ports:
  - nodePort: 32379
    port: 6379
    protocol: TCP
    targetPort: 6379
  type: NodePort
 

[root@master01 home]# kubectl get svc,pod
 

案例:部署myapp

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-kk
  namespace: default
  labels:
    app: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: soscscs/myapp:v1
        ports:
        - containerPort: 80
 

案例:部署MySQL数据库
[root@master01 demo]# cat mysql.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: devops
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: devops-mysql
  namespace: devops
spec:
  replicas: 1
  revisionHistoryLimit: 5      ###保留5个可以回滚的历史纪录
  strategy:
    type: RollingUpdate        ###更新策略为:RollingUpdate;在进行更新时,将旧pod副本替换为            
                                   新的pod,确保服务的可用性
  selector:
    matchLabels:
      app: devops-mysql
  template:
    metadata:
      labels:
        app: devops-mysql
    spec:
      volumes:
        - name: devops-mysql
          nfs:
            server: 192.168.91.104
            path: /root/data/nfs/mysql/devops
      containers:
        - name: devops-mysql
          image: mysql:5.7
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: abc123
          imagePullPolicy: Always
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: devops-mysql
              mountPath: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:
  name: devops-mysql
  namespace: devops
spec:
  ports:
    - port: 3306
      protocol: TCP
      targetPort: 3306
      nodePort: 30011
  selector:
    app: devops-mysql
  type: NodePort
  sessionAffinity: ClientIP     ###确保与客户端的会话一致性
 
[root@master01 demo]# vim mysql.yaml
[root@master01 demo]# kubectl apply -f mysql.yaml  

[root@master01 home]# kubectl get svc,pod -n devops 

总结
1.K8S集群中访问流向
port:为service在clusterIP上暴露的端口
targetport:对应容器映射在pod上的端口
nodeport:可以通过在K8S集群外部使用nodeIP+nodePort来去访问service
containerport:容器内部使用的端口
K8S集群内部:客户端——clusterIP:port——通过target port——podIP:containerport
K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport

2.语法格式
通过缩进表示层级关系
不能使用tab进行缩进,只能使用空格,一般开头缩进2个空格
字符后缩进一个空格,比如冒号,逗号等
使用—表示新的yaml文件的开始
使用#表示注释
3.yaml文件组成部署
(1)控制器定义
deployment:定义metadaea、spec、selector
通过yaml完成副本的定义,自主式的
(2)被控制对象
由哪一个控制器(自主式、deployment、statusfulset等)
4.常用字段的含义
如何快速编写yaml
(1)第一种使用kubectl create 命令生成yaml文件
(2)第二种使用kubectl get 命令导出yaml文件



















