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
类型 操作对象 适用环境 优点 缺点
命令式对象管理 对象 测试 简单 只能操作活动对象,无法审计、跟踪
命令式对象配置 文件 开发 可以审计、跟踪 项目大时,配置文件多,操作麻烦
声明式对象配置 目录 开发 支持目录操作 意外情况下难以调试
相关推荐
条纹布鲁斯43 分钟前
dockerdsktop修改安装路径/k8s部署wordpress和ubuntu
docker·kubernetes
weiabc44 分钟前
学习electron
javascript·学习·electron
fengbizhe1 小时前
笔试-笔记2
c++·笔记
余为民同志1 小时前
mini-lsm通关笔记Week2Day4
笔记
墨染风华不染尘1 小时前
python之开发笔记
开发语言·笔记·python
徐霞客3201 小时前
Qt入门1——认识Qt的几个常用头文件和常用函数
开发语言·c++·笔记·qt
HackKong1 小时前
小白怎样入门网络安全?
网络·学习·安全·web安全·网络安全·黑客
澜世2 小时前
2024小迪安全基础入门第三课
网络·笔记·安全·网络安全
Bald Baby2 小时前
JWT的使用
java·笔记·学习·servlet
心怀梦想的咸鱼2 小时前
UE5 第一人称射击项目学习(四)
学习·ue5