当前位置:   article > 正文

k8s学习笔记

k8s学习笔记


笔记大部分从官方地址中总结的,可以参考官方地址学习。
k8s官方文档地址:https://kubernetes.io/zh-cn/docs/

定义

k8s中,所有内容都被抽象成资源,用户通过操作资源来管理k8s。
k8s资源大致分为以下几种。pod、namespace、label、Deployment、Service,接下来分别介绍各个资源

1、pod

pod是k8s中的最小运行单元,可以理解为容器的封装。一个pod可以包含一个或多个容器。
kubectl命令参考:
以下命名空间统一用kube-system代替

# 获取指定Namespace下的pod
kubectl get pods -n kube-system
# 获取pod所在节点的信息
kubectl get pods -n kube-system -o wide
# 获取某个pod详细信息
kubectl describe pods podName -n kube-system
# 动态查看pod信息
kubectl get pods podName -n kube-system -w
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、Deployment

在k8s中,一般不直接操作pod进行管理,而是操作pod控制器进行管理pod,从而实现容器的管理。Deployment只是其中的一种控制器类型。
命令:

# 查看deployment下的pod信息
kubectl get deploy -n kube-system
# 查看详细信息
kubectl describe deploy podName -n kube-system
# 删除
kubectl delete deploy podName  -n kube-system
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、Label

Label是给各个资源贴上标签,通过标签可以对各个资源进行一个划分和选择。
命令:

# 查看标签
kubectl get pod podName  -n kube-system --show-labels
  • 1
  • 2

4、Service

各个pod之间都有一个虚拟ip、而且每次重启k8s服务都会重新分配pod的虚拟ip、并且外部是不可访问pod的虚拟ip的。基于此问题,Service应运而生,Service是可以看作是一组同类Pod对外访问的接口,借助Service,应用可以方便地实现服务发现和负载均衡。
命令:

# 查看service
kubectl get svc -n kube-system -o wide
  • 1
  • 2

5、Namespace

默认情况下,k8s中的pod之间是可以互相访问的,这样会导致许多问题。Namespace是可以实现资源隔离的作用,同Namespace的pod之间可以访问,不同Namespace的pod不可以访问。
命令:

# 获取所有命名空间
kubectl get ns
# 创建命名空间 dev
kubectl create ns dev
# 删除命名空间dev
kubectl delete ns dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

kubectl工具

定义:
kubectl可以理解为扩展版的docker-compose,与docker-compose一样,都支持通过yml文件进行容器的创建,更新,删除。区别就是kubectl是为k8s集群中的容器进行操作的。还有二者的yml语法不同

yml语法:

apiVersion: apps/v1						# 必选,版本号
kind: Deployment						# 资源类型Pod、Deployment
metadata:								# 元数据
  name: portal-back-deployment			# pod名称
  namespace: kube-system				# pod所属的Namespace
spec:								    # pod容器中的详细定义
  replicas: 1							# 备份数量
  selector:								# 管理的 Pod 的标签选择器
    matchLabels:						# 指定了标签选择器匹配的标签
      app: test							# 标签为app=portalback
  template:								# 指定创建pod的模板
    metadata:							# pod元数据信息
      labels:							# 指定了 Pod 的标签
        app: test 						# 同上述matchLabels值一致
    spec:								# pod规格信息
      containers:						# 容器列表
        - name: portal-back-container	# 容器名称
          image: 192.168.22.191:30002/kubecube/portal_back:V2.0	# 容器镜像名
          stdin: true					# 指定了是否将标准输入传递给容器
          tty: true						# 是否创建伪终端供容器使用
          securityContext:				# 指定了容器的安全上下文配置
            privileged: true			# 指定了容器是否具有特权
          volumeMounts:					# 挂载到容器内部的存储设置
          - name: k8s-config			# 挂载名称
            mountPath: /root			# 挂载到容器内部的目录
      volumes:
      - name: k8s-config
        hostPath:						# 主机存储位置,
          path: /root/.kube				# 主机存储目录
          type: Directory				# 挂载类型为目录
      hostPID: true		# 指定了是否在 Pod 中使用宿主机的 PID命名空间
      hostIPC: true		# 指定了是否在 Pod 中使用宿主机的 PID命名空间

---
apiVersion: v1							
kind: Service							# 资源类型为Service
metadata:								# 元数据
  name: portal-back-port				# 资源名称
  namespace: kube-system				# 应用的Namespace
spec:									# 规格数据
  selector:								# 选择器
    app: test							# 标签为app=test
  type: NodePort			# service类型,NodePort表示暴露节点上的端口
  ports:					# 指定了 Service 所监听的端口配置			
    - name: port1						# 指定了端口的名称为port1
      protocol: TCP						# 端口协议类型为tcp
      port: 7124						# service监听端口号
      targetPort: 7124					# pod端口号
      nodePort: 30894					# 暴露的节点端口号
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
# 使用声明式对象管理pod
# 部署应用pod容器
kubectl apply -f test.yml
# 删除pod容器
kubectl delete -f test.yml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 命令式对象管理:直接使用命令去操作kubernetes资源

    kubectl run nginx-pod --image=nginx:1.17.1 --port=80
    
    • 1
  • 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源

    kubectl create/patch -f nginx-pod.yaml
    
    • 1
  • 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源

    kubectl apply -f nginx-pod.yaml
    
    • 1
类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/239304?site
推荐阅读
相关标签
  

闽ICP备14008679号