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
类型 操作对象 适用环境 优点 缺点
命令式对象管理 对象 测试 简单 只能操作活动对象,无法审计、跟踪
命令式对象配置 文件 开发 可以审计、跟踪 项目大时,配置文件多,操作麻烦
声明式对象配置 目录 开发 支持目录操作 意外情况下难以调试
相关推荐
陈洪奇1 分钟前
注册中心学习笔记整理
笔记·学习
光影少年6 分钟前
从前端转go开发的学习路线
前端·学习·golang
兴趣使然_3 小时前
【笔记】使用 html 创建网址快捷方式
笔记·html·js
aramae5 小时前
C++ -- STL -- vector
开发语言·c++·笔记·后端·visual studio
fen_fen5 小时前
学习笔记(32):matplotlib绘制简单图表-数据分布图
笔记·学习·matplotlib
饕餮争锋9 小时前
设计模式笔记_创建型_建造者模式
笔记·设计模式·建造者模式
萝卜青今天也要开心9 小时前
2025年上半年软件设计师考后分享
笔记·学习
amazinging10 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十七天
python·学习·selenium
吃货界的硬件攻城狮10 小时前
【STM32 学习笔记】SPI通信协议
笔记·stm32·学习
一个天蝎座 白勺 程序猿10 小时前
Python练习(1)Python基础类型操作语法实战:20道实战题解与案例分析(上)
开发语言·python·学习