k8s命令学习

k8s命令学习

pod

pod是可以在k8s中创建和管理的、最小的可部署的计算单元

  1. yaml文件示例
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

    

  1. 相关操作命令
# 1. 执行创建命令
kubectl apply -f nginx_pod.yaml

# 2. 查看pod资源
kubectl get pods [--namespace=NAMESPACE] [-o wide]
# 指定命名空间 默认不指定的命名空间会放在default
# -o wide 显示额外信息,如Pod的IP,节点的位置

# 3. 查看单个Pod的详细信息
kubectl describe pod POD_NAME [--namespace=NAMESPACE

# 4. 查看Pod的资源使用情况(实时监控)
kubectl top pod POD_NAME [--namespace=NAMESPACE]
# 通过 Metrics Server 

# 5. 查看Pod的启动日志
kubectl logs -f POD_NAME [--namespace=NAMESPACE]  -c CONTAINER_NAME
# 当存在多个容器时,可以-c选项指定容器名

# 6. 查看Pod创建时的yaml文件信息
kubectl get pod POD_NAME -o yaml [--namespace=]

# 7. 进入Pod内部操作
kubectl exec -it POD_NAME [--namespace=NAMESPACE] -- /bin/bash
# 多容器Pod指定容器名
kubectl exec -it POD_NAME -c CONTAINER_NAME -- /bin/bash

# 删除Pod
kubectl delete pod POD_NAME [--grace -period=0 --force]
# 括号中的表示强制删除  

deployment

Depoloymemt通常用于管理一个应用负载的一组Pod,通常适用于不保持状态的负载

  1. 示例yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

说明:deployment会在集群中选取节点去创建三个Pod,每个Pod里面都是相同的服务,但是不同的Pod里面IP地址是不一样的,如果只有一个node,则都会在一个node上面创建三个相同的Pod

  1. 创建命令
de# 1. 创建Deployment
kubectl apply -f xxxx.yaml  # yaml文件创建
kubectl create deploy nginx-deploy --image nginx  # 指定命令创建

# 2. 查看Deployment
kubectl get deploy [DEPLOY_NAME -o yaml]
# 接-o yaml可以查看指定deploy的创建yaml文件

# 3. 更新Deployment
kubectl apply -f xxx.yaml  # 更新yaml文件,重新应用
kubectl set image deployment/nginx-deploy nginx=nginx:1.9.1 --record

# 4. 扩容和缩容Deployment
kubectl edit deploy nginx-deployment   # 打开编辑页面,修改副本数量值
kubectl scale deploy nginx-deployment --replicas=5  # 

# 5. 删除Deploy
kubectl delete deployment nginx-deployment
kubectl delete -f xxx.yaml

Kuberenetes网络模型

  1. 集群中的每个Pod都会获得自己的、独一无二的集群范围IP地址

Pod有自己的私有网络命名空间,同一个Pod内的不同容器进程彼此之间可以通过localhost进行通信

  1. Pod网络(集群网络)可以处理Pod之间的通信

所有Pod都可以与所有其他的Pod进行通信,无论是在同一个节点还是不同的节点

  1. Service API 允许为一个或多个后端Pod提供一个稳定的、长期有效的IP地址或主机名,其中组成服务的各个Pod的IP可以随时变化

  2. Gateway API  可以使集群外部的客户端能够访问Service

  3. NetworkPolicy 是一个内置的kubernetesAPI,允许控制Pod之间的流量或者Pod与外部世界之间的流量

service

k8s中的service有很多中类型

  1. ClusterIP(默认类型

这是 Service 的默认类型。它会为 Service 分配一个仅在集群内部可见的虚拟 IP(ClusterIP),使得集群内的 Pod 能够通过这个 IP 访问该 Service。此类型的 Service 无法被集群外部直接访问

  1. NodePort

这种类型的 Service 会在每个节点的 IP 上开放一个固定端口(范围是 30000 - 32767),通过访问任意节点的 IP 和这个端口,就能访问到对应的 Service。它是在 ClusterIP 之上构建的,会自动创建 ClusterIP。

  1. LoadBalancer

该类型的 Service 会借助云提供商(像 AWS、GCP、Azure)的负载均衡器,将流量分发到 Service。它是在 NodePort 之上构建的,会自动创建 NodePort 和 ClusterIP。

  1. ExternalName

这种类型的 Service 不会代理任何端口,也不会分配 ClusterIP。它通过返回 CNAME 记录,将服务名直接映射到一个外部域名(由externalName字段指定)

基本命令
# 1. 创建service
kubectl expose deployment nginx-deployment --port=80 --name=nginx-service

# 2. 查看service
kubectl get service nginx-service

yaml配置文件详解

apiVersion: v1           # API版本,不同资源类型使用不同版本
kind: Pod                # 资源类型(Pod, Deployment, Service等)
metadata:                # 元数据,用于标识资源
  name: my-pod           # 资源名称
  labels:                # 标签,用于选择和分组资源
    app: my-app
    tier: frontend
spec:                    # 资源规范,定义期望状态
  containers:            # Pod中的容器列表
  - name: nginx          # 容器名称
    image: nginx:1.14.2  # 容器镜像
    ports:               # 容器暴露的端口
    - containerPort: 80  # 容器内部端口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值