k8s学习笔记

本文详细阐述了Kubernetes的核心组件(如Pod、Deployment、Label、Service和Namespace)以及kubectl工具的使用,包括资源管理、容器化和命名空间隔离。
摘要由CSDN通过智能技术生成


笔记大部分从官方地址中总结的,可以参考官方地址学习。
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

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

3、Label

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

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

4、Service

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

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

5、Namespace

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

# 获取所有命名空间
kubectl get ns
# 创建命名空间 dev
kubectl create ns dev
# 删除命名空间dev
kubectl delete ns dev

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

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

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

    kubectl apply -f nginx-pod.yaml
    
类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值