前言
前面部分已经介绍了关于k8s的yaml配置文件,本文将尝试实践编写yaml文件部署应用。
一、环境准备
除了k8s环境,还需要准备好需要部署的应用镜像。可以使用docker进行制作,如果docker仓上可以直接拉取,也可以配置使其自动拉取。这里选择上一次实践用的官网教程使用镜像jocatalin/kubernetes-bootcamp 。
将镜像拉取到本地:docker pull jocatalin/kubernetes-bootcamp:v1 查看本地镜像:docker images
二、实践过程
1. 启动k8s
仍然使用minikube:minikube start
2. 查看下集群基本状态
主要是node、pod、svc、deploy等
kubectl get node
kubectl get pod
kubectl get svc
kubectl get deploy
3. 编写yaml内容
这里使用deployment+service部署应用。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bootcamp-deploy
labels:
app: my-bootcamp
spec:
selector:
matchLabels:
app: my-bootcamp
replicas: 2
template:
metadata:
labels:
app: my-bootcamp
spec:
containers:
- name: test-bootcamp
image: jocatalin/kubernetes-bootcamp:v1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hello-bootcamp
spec:
type: NodePort
selector:
app: my-bootcamp
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30008
4. 查看部署结果
状态都为running说明没问题了。本机情况如下:
E:\k8sTest>kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
bootcamp-deploy 2/2 2 2 64s
E:\k8sTest>kubectl get pod
NAME READY STATUS RESTARTS AGE
bootcamp-deploy-6b9599f456-h6ljq 1/1 Running 0 2m8s
bootcamp-deploy-6b9599f456-w9j7q 1/1 Running 0 2m8s
E:\k8sTest>kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-bootcamp NodePort 10.107.175.226 <none> 80:30008/TCP 2m10s
5. 发起请求进行接口测试
由于本地环境端口安全策略的原因,高端口没有被开启,这里继续使用之前介绍的方式,使用k8s集群内部自带的url路由转发进行访问应用: 先开启集群内部代理入口:kubectl proxy 通过pod-name访问应用:
E:\k8sTest>curl http://localhost:8001/api/v1/namespaces/default/pods/bootcamp-deploy-6b9599f456-w9j7q/proxy/
Hello Kubernetes bootcamp! | Running on: bootcamp-deploy-6b9599f456-w9j7q | v=1
E:\k8sTest>curl http://localhost:8001/api/v1/namespaces/default/pods/bootcamp-deploy-6b9599f456-h6ljq/proxy/
Hello Kubernetes bootcamp! | Running on: bootcamp-deploy-6b9599f456-h6ljq | v=1
|