k8s

介绍

Kubernetes是由 Google 开源的,目的是管理公司内部运行的成千上万的服务器,降低应用程序部署管理的成本。Kubernetes 将基础设施抽象,简化了应用开发、部署和运维等工作,提高了硬件资源的利用率,是一款优秀的容器管理和编排系统

Kubernetes 主要有由两类节点组成:

  • Master 节点主要负责管理和控制,是 Kubernetes 的调度中心;
  • Node 节点受 Master 节点管理,属于工作节点,负责运行具体的容器应用。

整体结构图如下所示:

image.png

栗子 🌰

启动一个 go 服务 编写 user-service.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: user-service
  5. labels:
  6. name: user-service
  7. spec:
  8. containers: #定义user容器,开放10086端口
  9. - name: user
  10. image: user
  11. ports:
  12. - containerPort: 10086
  13. imagePullPolicy: IfNotPresent
  14. - name: mysql #定义MySQL容器,开放3306端口
  15. image: mysql-for-user
  16. ports:
  17. - containerPort: 3306
  18. env:
  19. - name: MYSQL_ROOT_PASSWORD
  20. value: "123456"
  21. imagePullPolicy: IfNotPresent
  22. - name: redis #定义Redis容器,开放6379端口
  23. image: redis:5.0
  24. ports:
  25. - containerPort: 6379
  26. imagePullPolicy: IfNotPresent

在 Kubernetes 集群的 Node 节点中创建单个 Pod

kubectl create -f user-service.yaml

查看 user-service Pod 的信息和进入到 Pod 中:

  1. kubectl get pod user-service
  2. kubectl exec -ti user-service -n default -- /bin/bash

使用 Controller 管理 Pod

单个 Pod 不具备自我恢复的能力,可以使用 Controller 来管理 Pod,Controller 提供创建和管理多个 Pod 的能力,从而使得被管理的 Pod 具备自愈和更新的能力。

创建服务

将 MySQL 和 Redis 独立部署到 Kubernetes 上

user-redis-service.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: user-redis-service
  5. spec:
  6. selector:
  7. name: user-redis
  8. ports:
  9. - protocol: TCP
  10. port: 6379
  11. targetPort: 6379
  12. name: user-redis-tcp

执行 kubectl create -f user-redis-service.yaml 命令,即可为 user-redis Pod 生成一个 Service。

Service 定义了一组 Pod 的逻辑集合和一个用于访问它们的策略,Kubernetes 集群会为 Service 分配一个固定的 Cluster IP,用于集群内部的访问。

kubectl

Kubernetes 命令行工具,kubectl,使得你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。

安装完成后

kubectl version —client

参考

https://kubernetes.io/zh/docs/tasks/tools/install-kubectl/#install-with-homebrew-on-macos

查看 pod

kubectl -n infra-test get pod tctp-7b89f5b444-fqvtg

重启 pod 里的容器

https://stackoverflow.com/questions/46123457/restart-container-within-pod

找 pod

kubectl -n infra-test get pod -l app=tctp

查看日志

查看指定pod中指定容器的日志

kubectl -n infra-test logs -f tctp-7b89f5b444-fqvtg -c tctp

kubectl -n infra-test logs -c tctp -f tctp-7b89f5b444-fqvtg

kubectl 查看pod中的容器