在 Kubernetes 中部署应用程序
在完成了本地 Kubernetes 的快速搭建(基于 Docker)后,我们已经可以正式的使用它了。对于我们平时最常见的需求,那就是往 Kubernetes 里部署应用程序,如果你没有看过 Kubernetes 相关的知识,这时候你可能会六神无主,但问题不大,我们就可以使用最经典的 Nginx 来小试身手。
创建 Deployment
创建 nginx-deployment.yaml 文件:
|
|
应用 nginx-deployment.yaml 文件:
|
|
查看运行状态
查看 Pod 运行情况:
|
|
查看 Deployment 部署情况:
|
|
我们也可以通过 describe 命令进行查看
|
|
查看 Dashboard
在应用了 Nginx 的 Deployment 后,我们可以查看上一章节中我们所搭建的 Dashboard:
可能你在想,我只是执行了一条命令,怎么就把 Nginx 跑起来了,这时候你可以去查看容器组中的事件,就能够看到这个容器在运行时做涉及到的事件:
部署 Nginx
创建 Nginx Service
|
|
应用 nginx-service.yaml 文件:
|
|
查看应用的运行情况:
|
|
但这时候是无法访问到 Nginx 的,我们可以通过 Kubernetes 的 NodePort 的方式对外提供访问:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
selector:
app: nginx
ports:
- name: nginx-port
protocol: TCP
port: 80
nodePort: 30001
targetPort: 80
type: NodePort
然后再进行访问:
|
|
至此我们已经打通了和 Nginx 之间的访问。
部署 Go 程序
在部署环境中常常需要将应用程序部署上去,然后对外进行提供服务,我们模拟一个 Go 程序:
|
|
编写和编译 Dockerfile
在项目根目录创建 Dockerfile 文件,进行编写:
|
|
编译并打标签:
|
|
验证打包进 Docker 中的程序是否正常运行:
|
|
上传到 Dockerhub
登陆并推送镜像到 Dockerhub:
|
|
这时候你在 hub.docker.com 上就能看的你刚刚所上传的镜像内容:
编写 Kubernetes 配置
接下来我们需要针对刚刚所打包的 Go 程序创建 Deployment,编写 go-deployment.yaml 文件:
|
|
创建 Service,编写 go-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: awesome-project-svc
labels:
app: awesome-project
spec:
ports:
- port: 9001
type: ClusterIP
selector:
app: awesome-project
部署 Ingress
Ingress Controller
我们采用 Docker for Mac 特定提供的 Ingress Controller 部署脚本:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml
其会所有命名空间监视 Ingress 对象,并配置 RBAC 权限,否则你有可能会遇到 403 Forbidden 的问题。
Nginx Ingress
在完成了 Ingress Controller 等相关部署后,我们可以正式的部署属于自己业务的 Nginx Ingress 对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: website-ingress.local
http:
paths:
- backend:
serviceName: awesome-project-svc
servicePort: 9001
kubectl apply -f
应用刚刚所编写的配置文件,然后查看运行情况:
$ kubectl get ingresses.
NAME HOSTS ADDRESS PORTS AGE
test-ingress website-ingress.local localhost 80 8h
如何发现 ADDRESS 为空,则存在问题,需要进行排查(可能性有很多)。在确定 ADDRESS 属性正常后,我们需要打开 /etc/hosts
并配置 HOST 127.0.0.1 awesome-project.local
,并进行验证:
|
|
至此,我们完成了一个简单的 Go 程序的部署和外部调用。
小结
在本章中,我们通过部署 Nginx、Ingress、Go 程序的方式,直接实践了 Kubernetes 的基本流程,达到了将自己的简单程序部署在 Kubernetes 的一个小目标,接下来在后续的章节中我们将进一步针对文中所使用到的相关属性和内容进行详细说明。
毕竟在实践过后,就要去了解为什么,这样子才能做到融会贯通。
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/go/posts/kubernetes/2020-05-03-deployment/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com