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代替

powershell 复制代码
# 获取指定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

2、Deployment

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

bash 复制代码
# 查看deployment下的pod信息
kubectl get deploy -n kube-system
# 查看详细信息
kubectl describe deploy podName -n kube-system
# 删除
kubectl delete deploy podName  -n kube-system

3、Label

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

bash 复制代码
# 查看标签
kubectl get pod podName  -n kube-system --show-labels

4、Service

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

bash 复制代码
# 查看service
kubectl get svc -n kube-system -o wide

5、Namespace

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

bash 复制代码
# 获取所有命名空间
kubectl get ns
# 创建命名空间 dev
kubectl create ns dev
# 删除命名空间dev
kubectl delete ns dev

kubectl工具

定义:

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

yml语法:

yaml 复制代码
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					# 暴露的节点端口号
shell 复制代码
# 使用声明式对象管理pod
# 部署应用pod容器
kubectl apply -f test.yml
# 删除pod容器
kubectl delete -f test.yml
  • 命令式对象管理:直接使用命令去操作kubernetes资源

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

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

    powershell 复制代码
    kubectl apply -f nginx-pod.yaml
类型 操作对象 适用环境 优点 缺点
命令式对象管理 对象 测试 简单 只能操作活动对象,无法审计、跟踪
命令式对象配置 文件 开发 可以审计、跟踪 项目大时,配置文件多,操作麻烦
声明式对象配置 目录 开发 支持目录操作 意外情况下难以调试
相关推荐
旦沐已成舟13 分钟前
K8S搭建轻量级日志收集系统(EFK)
elk·kubernetes
thinktik2 小时前
AWS EKS安装S3 CSI插件[AWS 海外区]
后端·kubernetes·aws
Jy_06223 小时前
K8s中,deployment 是如何从 yaml 文件最终部署成功 pod 的
云原生·容器·kubernetes
mobº3 小时前
K8s 集群环境搭建 - yaml 版本(一)
云原生·容器·kubernetes
终端行者3 小时前
K8s中部署Minio集群 如何部署minio集群
云原生·容器·kubernetes·1024程序员节
koo3643 小时前
李宏毅机器学习笔记30
人工智能·笔记·机器学习
荣光波比3 小时前
Prometheus(二)—— 在K8s集群中部署Prometheus+Grafana+AlertManager实现全方位监控
kubernetes·grafana·prometheus
摇滚侠4 小时前
Spring Boot 3零基础教程,WEB 开发 内嵌服务器底层源码分析 笔记48
spring boot·笔记
报错小能手5 小时前
项目——基于C/S架构的预约系统平台 (1)
开发语言·c++·笔记·学习·架构
赤月幼狼6 小时前
clickhouse学习笔记(一)基础概念与架构
笔记·学习·clickhouse