k8s
介绍
Kubernetes是由 Google 开源的,目的是管理公司内部运行的成千上万的服务器,降低应用程序部署管理的成本。Kubernetes 将基础设施抽象,简化了应用开发、部署和运维等工作,提高了硬件资源的利用率,是一款优秀的容器管理和编排系统。
Kubernetes 主要有由两类节点组成:
- Master 节点主要负责管理和控制,是 Kubernetes 的调度中心;
- Node 节点受 Master 节点管理,属于工作节点,负责运行具体的容器应用。
整体结构图如下所示:

栗子 🌰
启动一个 go 服务 编写 user-service.yaml
apiVersion: v1kind: Podmetadata:name: user-servicelabels:name: user-servicespec:containers: #定义user容器,开放10086端口- name: userimage: userports:- containerPort: 10086imagePullPolicy: IfNotPresent- name: mysql #定义MySQL容器,开放3306端口image: mysql-for-userports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "123456"imagePullPolicy: IfNotPresent- name: redis #定义Redis容器,开放6379端口image: redis:5.0ports:- containerPort: 6379imagePullPolicy: IfNotPresent
在 Kubernetes 集群的 Node 节点中创建单个 Pod
kubectl create -f user-service.yaml
查看 user-service Pod 的信息和进入到 Pod 中:
kubectl get pod user-servicekubectl exec -ti user-service -n default -- /bin/bash
使用 Controller 管理 Pod
单个 Pod 不具备自我恢复的能力,可以使用 Controller 来管理 Pod,Controller 提供创建和管理多个 Pod 的能力,从而使得被管理的 Pod 具备自愈和更新的能力。
创建服务
将 MySQL 和 Redis 独立部署到 Kubernetes 上
user-redis-service.yaml
apiVersion: v1kind: Servicemetadata:name: user-redis-servicespec:selector:name: user-redisports:- protocol: TCPport: 6379targetPort: 6379name: 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
