使用本地镜像创建K8S服务

K8S在创建容器时,无法从本地localhost中获取镜像,因此,需要将镜像发布到私有镜像库,然后再从私有镜像库创建应用。

首先在docker中安装registry,

1
docker run -d -p 5000:5000 --name registry registry:2

然后,编辑docker 的daemon 配置文件,增加http支持:

1
2
3
"insecure-registries": [
"192.168.124.4:5000"
],

这里,192.168.124.4是本机的IP地址。

然后,将本地镜像推送到registry中:

1
2
docker tag kpi:latest 192.168.124.4:5000/kpi:latest  
docker push 192.168.124.4:5000/kpi:latest

发布完成后,可以创建k8s的app和服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1
kind: Deployment
metadata:
name: kpi-k8s
spec:
replicas: 1
selector:
matchLabels:
app: kpi-k8s
template:
metadata:
labels:
app: kpi-k8s
spec:
containers:
- name: kpi-k8s
image: "192.168.124.4:5000/kpi:latest"
ports:
- containerPort: 3000

运行:kubectl apply -f kpi-k8s.yaml
服务的配置文件:

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Service
metadata:
name: kpi-k8s-service
spec:
type: NodePort
selector:
app: kpi-k8s
ports:
- port: 13000
targetPort: 3000

运行:kubectl apply -f kpi-k8s-service.yaml
使用kubectl get services查看创建的服务:

1
2
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kpi-k8s-service NodePort 10.111.219.59 <none> 13000:31271/TCP 4h26m

对外的映射端口为31271
可以通过这个端口访问服务。