Skip to main content

Kubernetes

集群架构

  • master: 主节点,控制平台,不需要很高性能,通常一个就行,也可以开多个主节点来提高集群可用度。
  • worker: 工作节点,可以是虚拟机或物理计算机,任务在这里跑,机器性能需要好点;通常有很多个,可以不断加机器扩大集群;每个工作节点由主节点管理。
  • Pod: 可英,K8S 调度、管理的最小单位,一个 Pod 可以包含一个或多个容器,每个 Pod 有自己的虚拟 IP。一个工作节点可以有多个 pod,主节点会考量负载自动调度 pod 到哪个节点运行。

组件

  • kube-apiserver API 服务器,公开了 Kubernetes API
  • etcd 键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库
  • kube-scheduler 调度 Pod 到哪个节点运行
  • kube-controller manager 集群控制器
  • cloud-controller manager 与云服务商交互

指令 Commands

安装

brew install kubectl
kubectl version --client
brew install minikube
# 如果安装错误
brew unlink minikube
brew link minikube

启动

# 启动
minikube start
# 停止
minikube stop
# 清空集群
minikube delete --all
# 安装集群可视化 Web UI 控制台
minikube dashboard
# 获取节点信息
kubectl get node
kubectl get pod
# 显示更多信息
kubectl get node -o wide
kubectl get pod -o wide

kubectl describe node
kubectl describe pod

kubectl logs
kubectl logs [podName]
kubectl logs [podName] -f # 持续不断的读取 log

部署

通过命令行创建 pod

# 使用 image 部署应用 pod
kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1

通过 .yaml 文件创建 pod

kubectl apply -f ./pod.yaml
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
# 定义容器,可以多个
containers:
- name: test-k8s # 容器名字
image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像

通过 Deployment 文件为多个应用部署

apiVersion: apps/v1
kind: Deployment
metadata:
# 部署名字
name: test-k8s
spec:
replicas: 2
# 用来查找关联的 Pod,所有标签都匹配才行
selector:
matchLabels:
app: test-k8s
# 定义 Pod 相关数据
template:
metadata:
labels:
app: test-k8s
spec:
# 定义容器,可以多个
containers:
- name: test-k8s # 容器名字
image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像

操作

# 进入容器
kubectl exec -it [podName] -c [containerName] -- bash
# 推出容器
exit

kubectl scale deployment test-k8s --replicas=10

通过 端口映射 访问 pod 中容器

# Access pod at localhost:8080
kubectl port-forward [test-k8s-xxxxx-xxx] 8080:8080
kubectl logs pod/test-k8s-xxxxx-xxx -f

资源