1. Pod - 应用程序
我觉得对于用户来说,一个Pod就是一个应用程序。每个Pod都用一个yaml配置文件来描述。
官方的解释是Pod是一组容器以及与容器相关的资源的集合。
A Pod is a group of one or more application containers (such as Docker or rkt) and includes shared storage (volumes), IP address and information about how to run them.
1.1 运行状态
Pod既然是应用程序,那必然会有运行状态,比如running状态代表正在运行,CrashLoopBackOff代表程序运行出错,系统正在不断地尝试重启。
ref: 部署的pod处于CrashLoopBackOff状态 - CSDN博客
该博客介绍了pod出错时可能用到的命令,如查看某程序输出的日志、详细信息、事件等等。
1.2 Pod的yaml文件
yaml文件是pod应用程序的配置文件。创建Pod需要使用这个yaml文件:
kubectl apply -f kubernetes-dashboard.yaml # 创建Pod
yaml文件内容举例:
apiVersion: v1 # api版本
kind: Pod # 组件类型
metadata:
name: nginx-mysql-pod
labels: # 标签
app: nginx-mysql
spec:
containers:
- name: nginx # 容器1 名称
image: nginx # 容器1 image地址
- name: mysql # 容器2 名称
image: mysql # 容器2 镜像
env: # 环境变量
- name: MYSQL_ROOT_PASSWORD
value: mysql
2. Service 服务(一组Pod)
Kubernetes的 Service 是一组 Pod 的逻辑抽象,这组 Pod 通过 Label 来定义。Service 的定义 yaml 如下。
kind: Service
apiVersion: v1
metadata:
name: my-service # 服务名
spec:
selector: # 选择器,用于选择一些Pod
app: MyApp # 条件是 app为MyApp的所有Pod
ports:
- protocol: TCP
port: 80
targetPort: 9376
上面的yaml定义了一组含有app=MyApp
标签的Pod共同组成一个名为my-service
服务。
Kubernetes支持两种服务发现的模式:环境变量和 DNS。
3. Node - 一台物理机或者虚拟机
用户通过kubectl工具直接操作的是Master节点,其它的节点对于用户来说不可见。
4. Deployment - 部署
部署是选择性地创建一组pod。
早期版本使用Replication Controller对Pod副本数量进行管理,在新的版本中官方推荐使用Deployment来代替RC:
部署应用 kubectl run或者kubectl create
ref. Kubernetes(四) - Pod和Deployment
ref: 如何使用 Kubernetes 轻松部署深度学习模型 | 机器之心
该文章介绍了一个深度学习Python脚本逐步封装为Docker镜像的过程。
该脚本使用了基于Flask的Web服务器,将5000端口暴露给外界,对外提供辨识图片的服务。
客户通过POST请求发来图片,此脚本可以返回分类结果。
kubectl get 查看信息
kubectl get service
kubectl get rc
kubectl get pods
kubectl get deployment
kubectl run --image=nginx --replicas=3 创建并运行3个Pod. 带有参数 --restart-policy=Always 的资源将被部署为 Deployment,带有参数 --restart-policy=Never 的资源将被部署为 Pod。
kubectl create -f nginx-deployment.yaml 创建一个部署(并执行)
kubectl apply -f kubernetes-dashboard.yaml 创建一个Pod
kubeadm init --config kubeadm.yaml用来启动主节点或Worker节点。
查看日志:
sudo kubectl logs kubernetes-dashboard-6dccb458d5-x7xft --namespace=kube-system
sudo kubectl logs kubernetes-dashboard-6dccb458d5-x7xft -n kube-system # 系统组件必须指定命名空间