本文以 ANOYI-BLOG 这个博客系统为例,演示在 Kubernetes 集群中运行无状态服务,以及相关命令的用法介绍。
先决条件
确保 kubernetes 集群处于运行状态 【Kubernetes 环境搭建 - MacOS】
kubectl cluster-info
输出如下:
Kubernetes master is running at https://192.168.99.100:8443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
确保 Minikube addon 中的 kube-dns 正常运行 【Minikube 基础插件 addons】
kubectl get po,svc -n kube-system
输出如下
NAME READY STATUS RESTARTS AGE
pod/kube-addon-manager-minikube 1/1 Running 0 2d
pod/kube-dns-6dcb57bcc8-dq8th 3/3 Running 0 13h
pod/kubernetes-dashboard-5498ccf677-487xw 1/1 Running 0 13h
pod/storage-provisioner 1/1 Running 0 13h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 13h
service/kubernetes-dashboard NodePort 10.102.82.122 <none> 80:30000/TCP 13h
创建 Deployment
Kubernetes Pod 是一个或多个容器的组合,为了方便管理容器和容器间的通信而捆绑在一起。本教程中的 Pod 只有一个容器。Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 容器终止时重新启动它。推荐使用 Deployment 是管理 Pod 的创建和伸缩。
创建 Deployment
kubectl run blog-node --image=registry.cn-hangzhou.aliyuncs.com/anoy/blog \
--port=8080 \
--env="JIANSHU_ID=7b7ec6f2db21" \
--env="BLOG_TITLE=Hello Kubernetes" \
--env="BLOG_DESC=本博客正运行在 Kubernetes 环境中"
查看 Deployment
kubectl get deployments
输出如下:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
blog-node 1 1 1 1 2m
查看 Pod
kubectl get pods
输出如下:
NAME READY STATUS RESTARTS AGE
blog-node-7dff65b564-gxkkn 1/1 Running 0 2m
查看 events
kubectl get events
更多详细信息使用命令
kubectl get --help
查看
创建 Service
默认情况下,只能通过 Kubernetes 群集内部的 IP 地址访问 Pod。 要使 Kubernetes 虚拟网络外部可以访问 blog-node
,必须将 Pod 作为 Kubernetes service 暴露。
对外暴露 Deployment
kubectl expose deployment blog-node --type=LoadBalancer
查看服务
kubectl get services
输出如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
blog-node LoadBalancer 10.96.38.7 <pending> 8080:31818/TCP 23s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16h
--type=LoadBalancer
表示在群集外部公开这个服务。在支持负载平衡器的云提供商上,将提供一个外部 IP 地址来访问该服务。在 Minikube 上,通过 minikube service
命令访问该服务。
minikube service blog-node
执行后,会自动打开浏览器,并访问到服务的首页。
更新应用
构建新版本镜像
docker build -t registry.cn-hangzhou.aliyuncs.com/anoy/blog:[新版本号] .
更新 Deployment 中的镜像
kubectl set image deployment/blog-node blog-node=registry.cn-hangzhou.aliyuncs.com/anoy/blog:[新版本号]
重新访问服务
minikube service blog-node
删除 Service 及 Deployment
kubectl delete service blog-node
kubectl delete deployment blog-node