2022-03-03 day97 kubenetes

第1章 常用资源类型
1.工作负载类型
RC ReplicaController 副本控制器
RS ReplicaSet 副本设置
DP Deployment 部署
DS DaemonSet 进程设置

2.服务发现及负载均衡 ---网络资源类型
Service 服务
Ingress 进入

3.配置与存储资源
ConfigMap 存储配置文件
Secret 存储用户字典

4.集群级别资源
Namespace 资源隔离
Node 节点
Role 角色
ClusterRole 集群角色
RoleBinding 角色绑定
ClusterRoleBinding 集群角色绑定

第2章 资源配置清单体验
1.什么是资源配置清单
资源配置清单就是我们写的yaml文件

2.如何学习编写资源配置清单
看命令帮助
看官方文档
看别人写好的

3.资源配置清单语法格式
单词驼峰写法,除了首个单词,其他单词首字母大写
imagePullPolicy

字段类型:

apiVersion: v1


metadata:
name: nginx-pod
labels:

[]Object
spec:
containers:

  • name: nginx


metadata:
name: nginx-pod
labels:
app: nginx

4.通过命令帮助查看资源配置清单格式
explain 解释的意思

命令帮助

kubectl explain pod

image.png

kind 种类
v1 稳定版本

DESCRIPTION 解释说明
FIELDS 字段(必要的字段)
apiVersion api版本
kind 种类
matedata 元数据(在etcd本身的身份信息)
spec pod运行相关的信息
kind 键:值表示
metadata 键 :子选项

kubectl explain pod.metadata


image.png

常用的就三个
metadata:
labels: 键值类型
app:nginx
name: nginx-pod

image.png

kubectl explain pod.spec
required 必须


image.png

kubectl explain pod.spec.containers


image.png

image.png

image.png

还有一个字段也需要关注一下
imagePullPolicy 镜像拉取方针

默认是IfNotPresent 就是本地存在镜像就拉取本地,没有的话拉取远端

image.png

根据上面查询的结果写一个最简单的pod资源清单

apiVersion: v1
kind: Pod
metadata:
     labels:
        app:nginx
     name: nginx-pod
space:
    containers:
    name: nginx
    images: nginx:1.14.0
    imagePullPolicy: IfNotPresent
image.png

编写资源配置清单

apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:

  • name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent

先删除pod节点


image.png

再创建pod

应用资源配置清单

kubectl create -f nginx-pod.yml 第一次创建的时候可以用create,apply已经创建的pod可以更新操作,以后都直接用apply就行

kubectl apply -f nginx-pod.yml

报错了


image.png

解决方法


image.png

image.png

pod创建成功


image.png

查看创建的pod

kubectl get pod

image.png

5.资源配置清单解释
apiVersion: v1 #api版本号
kind: Pod #资源类型
metadata: #原数据
name: nginx-pod #pod显示的名称
labels: #标签
app: nginx #标签名:值
spec: #pod具体运行的内容
containers: #容器相关的配置

  • name: nginx #容器名称
    image: nginx:1.14.0 #镜像名称
    imagePullPolicy: IfNotPresent #镜像拉取策略IfNotPresent如果本地没有,才从网上拉取

第3章 重新认识POD
1.pod内的容器共享根容器的网络
apiVersion: v1
kind: Pod
metadata:
name: nginx-tomcat
labels:
app: nginx
spec:
containers:

  • name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
  • name: tomcat
    image: tomcat
    imagePullPolicy: IfNotPresent
image.png

image.png

删除一个pod,删除yml就相当于把资源配置清单里面的都删除了,比较快
kubectl delete -f nginx-pod.yml

image.png

kubectl get pod -o wide 查看pod详细信息,可以查看运行在哪个节点和IP


image.png

查看某一个pod的话就是kubectl get pod nginx-pod -o wide


image.png

get就是get资源类型,也可以get节点信息
kubectl get node -o wide


image.png

获取pod运行的详细信息,后接pod名
kubectl describe pod nginx-tomcat

image.png

查看指定pod的详细信息
kubectl describe 资源类型 资源名称
kubectl describe pod nginx-pod

删除pod
kubectl delete 资源类型 资源名称
kubectl delete pod nginx-pod

image.png

当我运行比较多删除怎么办,相当于删除清单里面的内容
kubectl delete -f nginx-tomcat.yml

image.png

正在运行的pod 导出pod清单
kubectl get pod nginx-tomcat -o yaml

image.png
image.png

导出某一个pod节点清单,并指定名称
kubectl get pod nginx-tomcat -o yaml >nginx-tomcat.yaml


image.png
image.png

创建nginx-tomcat.yml的pod清单后,curl命令测试

image.png
image.png

查看一个pod里的容器日志
如果pod只有一个容器的话
kubectl logs -f nginx-tomcat
有指定pod中某一个容器的日志
kubectl logs -f nginx-tomcat nginx

image.png

查看api 文档

https://k8s.mybatis.io/v1.19/
image.png
image.png

2.pod内的容器共享存储

apiVersion: v1
kind: Pod
metadata:
  name: nginx-tomcat
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: data
      mountPath: /code/ 
 
  - name: tomcat
    image: tomcat
    imagePullPolicy: IfNotPresent
    volumeMounts:                                   #容器要挂载了
    - name: data                                        #挂载名字data
      mountPath: /code/                           #挂载目录

  volumes:
  - name: data
    emptyDir: {}            #定义好一个空的存储键
image.png

现在要在spc --container里面找挂载了


image.png
image.png
image.png

启动pod

kubectl apply -f nginx-tomcat-volumes.yml

image.png

启动的pod,进入容器中
kubectl exec -it nginx-tomcat-vlounes /bin/bash

image.png

进入指定的容器


image.png

kubectl exec -it nginx-tomcat-vlounes -c tomcat /bin/bash


image.png

手动创建一个nginx.html文件测试


image.png
image.png

第4章 POD生命周期
1.POD生命周期介绍
init container:
初始化容器是指在主容器启动之前,先启动一个容器来做一些准备工作,比如两个容器做了共享volum,然后可以先启动一个容器来对目录进行更改用户授权。
比如主容器需要连接数据库,可以先使用初始化容器测试可否正常连接数据库,如果可以正常连接再启动主容器。

hook:
PostStart:在容器启动创建后立刻执行,但是时间不能太长,否则容器将不会是running状态
PreStop:在容器停止被删除前执行,主要用于优雅的关闭应用程序。

liveness probe:
存活性探针,用于确定容器内的应用是否还活着

readiness probe:
就绪性探针,用于确定容器是否已经准备就绪可以干活了,比如扩容一个Pod,只有等这个Pod里面的应用完全启动了,才会将流量进入。

第5章 初始化容器实验
1.实验目标
初始化容器: 生成一个首页文件
业务容器: 使用初始化容器生成首页

2.初始化容器的选择
取决于你要操作的指令有多复杂,一般来说都是很简单的任务
创建用户,创建目录,更改权限,解压代码
所以,一般初始化容器都会选择比较小的镜像
busybox
alpine

image.png

3.初始化容器资源配置清单
初始化容器文档位置

image.png
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  initContainers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    args: [/bin/sh, -c, 'echo k8s >> /usr/share/nginx/html/index.html']
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html/

  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html/

  volumes:
  - name: data
    emptyDir: {}

新建pod配置清单


image.png

创建pod并使用curl测试


image.png

4.初始化流程
get pod 流程命令,类似于tail -f

kubectl get pod -w

NAME READY STATUS RESTARTS AGE
nginx-pod 0/1 Pending 0 0s
nginx-pod 0/1 Pending 0 0s
nginx-pod 0/1 Init:0/1 0 0s
nginx-pod 0/1 Init:0/1 0 4s
nginx-pod 0/1 PodInitializing 0 5s
nginx-pod 1/1 Running 0 6s

image.png

5.测试访问
curl 6}')

启动pod后,init容器还在运行

image.png
image.png

第6章 POD启动和停止钩子
查看生命周期


image.png

1.资源配置清单

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command: [/bin/sh, -c, 'echo k8s > /usr/share/nginx/html/index.html']
      preStop:
        exec:
          command: [/bin/sh, -c, 'echo beybey > /code/stop.log']
    volumeMounts:
    - name: data
      mountPath: /code/

  volumes:
  - name: data
    hostPath:
      path: /code/
image.png
image.png
image.png

手动测试


image.png

停止pod

image.png
image.png
image.png

第7章 存活性探针
1.编写资源配置

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command: [/bin/sh, -c, 'echo ok > /usr/share/nginx/html/health.html']
      preStop:
        exec:
          command: [/bin/sh, -c, 'echo beybey > /usr/share/nginx/html/stop.log']
    livenessProbe:
      exec:
        command:
        - cat
        - /usr/share/nginx/html/health.html
      #httpGet:                          
      #  path: /health.html      
      #  port: 80                        
      initialDelaySeconds: 3
      periodSeconds: 3

    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html/

  volumes:
  - name: data
    hostPath:
      path: /code/

2.参数解释

    livenessProbe:
      exec:
        command:
        - cat
        - /usr/share/nginx/html/health.html 
      httpGet:              
        path: /health.html      
        port: 80            
      initialDelaySeconds: 3
      periodSeconds: 3  

3.结论
如果存活性探针探测失败
会将POD重启,而不是删除
有问题的容器会停止,但是不会删除,会新启动一个容器
如果删除这个POD,无论是正在运行的容器还是已经停止的容器都会被删除
命令探针和http探针不能同时使用

第8章 就绪性探针

pod资源配置

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command: [/bin/sh, -c, 'echo ok > /usr/share/nginx/html/health.html']
      preStop:
        exec:
          command: [/bin/sh, -c, 'echo beybey > /usr/share/nginx/html/stop.log']
    livenessProbe:
      httpGet:                          
        path: /health.html      
        port: 80                        
      initialDelaySeconds: 3
      periodSeconds: 3
    readinessProbe:
      httpGet:                          
        path: /index.html
        port: 80                        
      initialDelaySeconds: 30
      periodSeconds: 3

    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html/

  volumes:
  - name: data
    hostPath:
      path: /code/

service资源配置

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: default
spec:
  selector: 
    app: nginx
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30000 
  type: NodePort

第x章 常用管理命令
1.查看资源类型帮助
kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers

2.应用资源配置清单
kubectl create -f nginx-pod.yml
kubectl apply -f nginx-pod.yml

3.查看运行的pod
kubectl get 资源类型
kubectl get pod
kubectl get pod -o wide

4.查看指定pod的详细信息
kubectl describe 资源类型 资源名称
kubectl describe pod nginx-pod

5.删除pod
kubectl delete 资源类型 资源名称
kubectl delete pod nginx-pod

kubectl delete -f 资源清单
kubectl delete -f nginx-pod.yml

6.将正在运行的资源类型导出
kubectl get pod -o yaml

7.查看pod内容器的日志
kubectl logs -f pod名称
kubectl logs -f pod名称 容器名称

第x章 报错记录
1.查看pod日志提示报错
[root@master ~/k8s_yml/POD]# kubectl logs -f nginx-tomcat
error: a container name must be specified for pod nginx-tomcat, choose one of: [nginx-1 nginx-2]

原因:
如果一个pod里有多个容器,则查看日志时需要指定到具体的容器

解决:
kubectl logs -f nginx-tomcat nginx-2

你可能感兴趣的:(2022-03-03 day97 kubenetes)