使用containerd作为容器运行k8s部署后端服务deployment样例
我把service和deployment都写在同一个yaml文件里面了。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: restfulweb # 部署的名称
namespace: api # 部署到哪个命名空间
spec:
replicas: 2 # 设置副本数量为2
selector:
matchLabels:
app: restfulweb1 # 用于选择匹配的Pod标签
template:
metadata:
labels:
app: restfulweb1 # Pod的标签
spec:
containers:
- name: restfulwebc # 容器名称
image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
# image: restfulapi:latest # For image in docker
imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
ports:
- containerPort: 80 # 容器内部监听的端口
---
apiVersion: v1
kind: Service
metadata:
name: restfulweb-service # 服务的名称
spec:
externalTrafficPolicy: Cluster # 外部流量策略设置为集群
selector:
app: restfulweb1 # 用于选择匹配的Pod标签
ports:
- protocol: TCP # 使用TCP协议
port: 5000 # 服务暴露的端口
targetPort: 5000 # Pod中容器的端口
nodePort: 30500 # 在每个Node上分配的端口,用于外部访问
type: NodePort # 服务类型,使用NodePort
我的集群的CRI是containerd,所以我一开始很担心是否可以从docker仓库中拉取相对应镜像来起容器,所以先尝试从containerd仓库拉。
从containerd获取镜像
对应的配置如下:
image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
但是需要提前从docker那里导出镜像然后再用下面ctr命令放进去containerd的仓库,需要注意的是一定要放在k8s.io的命令空间下面,不然是识别不到的。
ctr -n k8s.io images import restfulapi.tar
更多ctr命令的介绍,也可以看看我的这篇文章。
https://blog.csdn.net/HELLOWORLD2424/article/details/140834427
从docker仓库获取镜像
然后我再尝试直接从docker仓库去拉,docker没有命令空间的概念,这里会更简单,但是pod起的会比第一种方法慢,可能是因为镜像需要转换。
image: restfulapi:latest # For image in docker