Docker容器微服务架构和实践容器化应用

Kubernetes 入门:运行无状态服务

2018-05-09  本文已影响116人  Anoyi

本文以 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
上一篇 下一篇

猜你喜欢

热点阅读