服务端开发(6) K8S
2023-08-09 14:53:19 # NJU # 服务端开发

0. 准备工作

安装 k8s

部署 dashboard

  • kubectl apply -f kubernetes-dashboard.yaml
  • 检查 kubernetes-dashboard 应用状态
    • kubectl get pod -n kubernetes-dashboard
  • 将k8s server代理到本地端口:kubectl proxy
  • 配置控制台访问令牌

启动ingress controller

  • kubectl apply -f ingress-nginx-controller.yaml

验证 Kubernetes 集群状态

  • kubectl cluster-info
  • kubectl get nodes
  • kubectl get nodes --show-labels
  • 给节点打标签:kubectl label node docker-desktop disktype=ssd

1. 核心概念

1.1 Kubernetes 基本架构

image-20230406003846139

1.2 k8s中的资源

  • namespaces
  • Pods
  • ReplicaSet
  • Deployment
  • Service
  • Ingress
  • configmap
  • secrets
  • serviceaccounts
  • DaemonSet

1.3 核心概念

image-20230406003955811

Label

image-20230406004020943

Pod

Pod 是 Kubernetes 调度的最小单元

一个 Pod 可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机。Pod 的设计理念是为了支持多个容器在一个 Pod 中共享网络和文件系统

  • PID 命名空间:Pod中不同的应用程序可以看到其他应用程序的进程ID
  • network 命名空间:Pod 中多个容器处于同一个网络命名空间,因此能够访问的 IP 和端口范围都是相同的。也可以通过 localhost 相互访问
  • IPC 命名空间:Pod 中的多个容器共享 Inner-process Communication 命名空间,因此可以通过 SystemV IPC 或 POSIX 进行进程间通信
  • UTS 命名空间:Pod 中的多个容器共享同一个主机名
  • Volumes:Pod 中各个容器可以共享在 Pod 中定义分存储卷(Volume)

restartPolicy 字段

  • Always:只要退出就重启
  • OnFailure:失败退出时(exit code不为0)才重启
  • Never:永远不重启

Pod、Container 与 Node 之间的关系

image-20230406004354883

2. K8S 操作

创建一个pod

  • kubectl run myspittr --image spittr:1.0-SNAPSHOT

  • kubectl get pods

  • kubectl logs -f myspittr

  • pod中执行一个命令

    • kubectl exec myspittr -- ls /run/secrets/kubernetes.io/serviceaccount
  • kubectl delete pod myspittr

如何将pod或service的端口快速映射到本机端口(调试用)

创建服务

  • kubectl expose pod myspittr --port 8080

  • kubectl get svc

  • kubectl delete service myspittr

创建 ingress

  • kubectl create ingress myspittr --class=nginx --rule=www.demo.com/*=myspittr:8080

  • kubectl delete ingress myspittr

如何使用命令行快捷创建deployment、service、ingress

  • kubectl create deployment myspittr --image=spittr:1.0-SNAPSHOT --port=8080

  • kubectl expose deployment myspittr

    • 把上面的这个pod的8080端口暴露为myspittr服务
  • kubectl create ingress myspittr --class=nginx --rule=www.demo.com/*=myspittr:8080

  • 访问:http://www.demo.com/spittr/

删除:

  • kubectl delete ingress myspittr
  • kubectl delete service myspittr
  • kubectl delete deployment myspittr

3. 部署

使用yaml文件部署

  • kubectl create -f k8s-deploy.yaml
  • kubectl delete -f k8s-deploy.yaml

Deployment

  • 更新镜像重部署
    • kubectl set image deployment/spittr spittr=spittr:1.0
  • 扩容
    • kubectl scale deployment spittr --replicas 2
  • 自动
    • kubectl autoscale deployment spittr --min=10 --max=15 --cpu-percent=80
  • 查看历史版本
    • kubectl rollout history deployment/spittr
  • 回滚到前一个版本
    • kubectl rollout undo deployment/spittr

4. k8s常用命令

image-20230406005721950