k8s-应用部署
该demo主要作为一个dubbo项目通过maven自动化docker打包插件发布到镜像仓库样例工程。该wiki后面同时会提供k8s部署zk,mysql,应用包的整个过程。该项目大体功能:zk作为注册中心,服务端发布服务,消费端订阅服务,在调用过程中访问mysql数据库。
环境准备:k8s集群,以及配置好kubectl客户端工具.
项目源码:https://github.com/HushAsy/demo
1.provider,consumer镜像制作:
关于自动化镜像发布,可以参考我的另一篇文章:https://www.cnblogs.com/HushAsy/p/9896196.html
此处贴出Dockerfile文件:
FROM registry.cn-hangzhou.aliyuncs.com/hush/basecontainer: #添加本地jar包
RUN mkdir -p /home/admin/app/
RUN mkdir -p /home/admin/tomcat/
ENV CATALINA_HOME /home/admin/tomcat/
#
ARG JAR_FILE ADD target/${JAR_FILE} /home/admin/app/
#
#
#
# 将启动命令写入启动脚本 start.sh
RUN echo "$JAVA_HOME/bin/java -jar $JAVA_OPTS -Ddubbo.address.ip=$POD_IP -Djava.security.egd=file:/dev/./urandom /home/admin/app/${JAR_FILE} --spring.profiles.active=prod" > /home/admin/start.sh && chmod +x /home/admin/start.sh
WORKDIR $CATALINA_HOME
ENTRYPOINT ["/bin/bash", "/home/admin/start.sh"]
2.mysql-app.yaml
#mysql-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_mysql
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: ""
ports:
- containerPort:
name: mysql
#在客户端提交yaml文件创建pod
kubectl create -f mysql-app.yaml
#创建成功后,执行下面命名可以看到当前pod执行情况
kubectl get pods
3.mysql service yaml配置
#mysql-srv.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port:
selector:
app: mysql
4.zk.yaml配置
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: zk-
spec:
replicas:
template:
metadata:
labels:
app: zk
node: node0
spec:
hostname: zk-
volumes:
- name: zk-data
hostPath:
path: /data/zk-cluster/zk-data-
- name: zk-logs
hostPath:
path: /data/zk-cluster/zk-logs-
containers:
- name: zk-
image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
imagePullPolicy: IfNotPresent
volumeMounts:
- name: zk-data
readOnly: false
mountPath: "/data/zk-data"
- name: zk-logs
readOnly: false
mountPath: "/data/zk-logs"
ports:
- containerPort:
- containerPort:
- containerPort:
#command: ['tail', '-f', '/etc/hosts']
env:
- name: ZOO_MY_ID
value: ''
- name: ZOO_SERVERS
# 注意!!k8s使用到virtual ip,因此,本机必须使用0.0.0. ip地址,否则本机zk启动会异常:
# ERROR [zk1/10.0.0.251::QuorumCnxManager$Listener@] - Exception while listening
# java.net.BindException: Address not available (Bind failed)错误
value: server.=0.0.0.0:: server.=zk-:: server.=zk-::
- name: ZOO_DATA_DIR
value: '/data/zk-data'
- name: ZOO_DATA_LOG_DIR
value: '/data/zk-logs' ---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: zk-
spec:
replicas:
template:
metadata:
labels:
app: zk
node: node1
spec:
hostname: zk-
volumes:
- name: zk-data
hostPath:
path: /data/zk-cluster/zk-data-
- name: zk-logs
hostPath:
path: /data/zk-cluster/zk-logs-
containers:
- name: zk-
image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
imagePullPolicy: IfNotPresent
volumeMounts:
- name: zk-data
readOnly: false
mountPath: "/data/zk-data"
- name: zk-logs
readOnly: false
mountPath: "/data/zk-logs"
ports:
- containerPort:
- containerPort:
- containerPort:
#command: ['tail', '-f', '/etc/hosts']
env:
- name: ZOO_MY_ID
value: ''
- name: ZOO_SERVERS
# 注意!!k8s使用到virtual ip,因此,本机必须使用0.0.0. ip地址,否则本机zk启动会异常:
# ERROR [zk1/10.0.0.251::QuorumCnxManager$Listener@] - Exception while listening
# java.net.BindException: Address not available (Bind failed)错误
value: server.=zk-:: server.=0.0.0.0:: server.=zk-::
- name: ZOO_DATA_DIR
value: '/data/zk-data'
- name: ZOO_DATA_LOG_DIR
value: '/data/zk-logs' ---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: zk-
spec:
replicas:
template:
metadata:
labels:
app: zk
node: node2
spec:
hostname: zk-
volumes:
- name: zk-data
hostPath:
path: /data/zk-cluster/zk-data-
- name: zk-logs
hostPath:
path: /data/zk-cluster/zk-logs-
containers:
- name: zk-
image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
imagePullPolicy: IfNotPresent
volumeMounts:
- name: zk-data
readOnly: false
mountPath: "/data/zk-data"
- name: zk-logs
readOnly: false
mountPath: "/data/zk-logs"
ports:
- containerPort:
- containerPort:
- containerPort:
#command: ['tail', '-f', '/etc/hosts']
env:
- name: ZOO_MY_ID
value: ''
- name: ZOO_SERVERS
# 注意!!k8s使用到virtual ip,因此,本机必须使用0.0.0. ip地址,否则本机zk启动会异常:
# ERROR [zk1/10.0.0.251::QuorumCnxManager$Listener@] - Exception while listening
# java.net.BindException: Address not available (Bind failed)错误
value: server.=zk-:: server.=zk-:: server.=0.0.0.0::
- name: ZOO_DATA_DIR
value: '/data/zk-data'
- name: ZOO_DATA_LOG_DIR
value: '/data/zk-logs'
5.zk service yaml配置
---
kind: Service
apiVersion: v1
metadata:
name: zk-
labels:
app: zk
node: node0
spec:
type: LoadBalancer
ports:
- name: port-
port:
- name: port-
port:
- name: port-
port:
selector:
app: zk
node: node0 ---
kind: Service
apiVersion: v1
metadata:
name: zk-
labels:
app: zk
node: node1
spec:
type: LoadBalancer
ports:
- name: port-
port:
- name: port-
port:
- name: port-
port:
selector:
app: zk
node: node1 ---
kind: Service
apiVersion: v1
metadata:
name: zk-
labels:
app: zk
node: node2
spec:
type: LoadBalancer
ports:
- name: port-
port:
- name: port-
port:
- name: port-
port:
selector:
app: zk
node: node2
6.部署provider yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: provider
labels:
app: provider
spec:
replicas: 1
selector:
matchLabels:
app: provider
template:
metadata:
labels:
app: provider
spec:
containers:
- name: provider
image: <镜像地址>
ports:
- containerPort:
7.consumer deployment yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: consumer
labels:
app: consumer
spec:
replicas:
selector:
matchLabels:
app: consumer
template:
metadata:
labels:
app: consumer
spec:
containers:
- name: consumer
image: <镜像地址>
ports:
- containerPort:
8.consumer service yaml
kind: Service
apiVersion: v1
metadata:
name: consumer_svc
spec:
selector:
app: consumer
ports:
- protocol: TCP
port:
9. 前端访问控制 ingress 可以瞅瞅这位哥写的博客:https://mritd.me/2017/03/04/how-to-use-nginx-ingress/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: <host>
http:
paths:
- path: /index
backend:
serviceName: consumer_svc
servicePort:
通过对应域名或ip访问 完美
k8s-应用部署的更多相关文章
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...
- k8s二进制部署
k8s二进制部署 1.环境准备 主机名 ip地址 角色 k8s-master01 10.0.0.10 master k8s-master02 10.0.0.11 master k8s-node01 1 ...
- Prometheus K8S中部署Alertmanager
Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...
- K8S CoreDNS部署失败,发现的一个问题
K8S CoreDNS部署失败,查看错误日志,提示如下 root >> kubectl get all --all-namespaces -o wide root >> kub ...
- Kubernetes之在k8s中部署Java应用
部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...
- kubernetes之三 使用kubectl在k8s上部署应用
在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...
- Docker & k8s 系列三:在k8s中部署单个服务实例
本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...
- 在k8s上部署日志系统elfk
日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...
- 优化:在k8s上部署的gitlab
gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...
- 使用Rancher在K8S上部署高性能PHP应用程序
介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...
随机推荐
- fastadmin cms使用注意一
addon和application还有前端配置后还需要 注意表配置
- [转帖]Kubernetes中安装Helm及使用
Kubernetes中安装Helm及使用 2018年07月02日 17:41:09 灬勿忘丶心安 阅读数 3699更多 分类专栏: K8S 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
- ######【Python】【基础知识】【一些未知的知识点】######
在查资料.看书过程中遇到的一些未知的领域.知识点: 1.模仿静态变量 可参考: https://www.runoob.com/python/python-exercise-example41.html ...
- 【转帖】MBW内存测试
MBW内存测试 https://www.cnblogs.com/dongdongwq/p/5431561.html 在测试前,理应了解本机所具备的特点,比如CPU频率.内存频率.内存大小,等等信息. ...
- ArrayList集合详解
ArrayList 实现了List的接口,是长度可变的数组,空间是连续的 api默认提供了很多操作ArrayLis的方法,这些方法可以去api里面查询使用 一.这么多方法怎么学?1.熟练使用常见的方法 ...
- java中JDBC是什么?
[学习笔记] JDBC是什么? JDBC即(java database connectivity数据连接).JDBC是Sun公司编的一堆类和方法,都封装在java.sql包中.你可以利用这堆类和方法来 ...
- Hadoop集群搭建-01前期准备
Hadoop集群搭建-05安装配置YARN Hadoop集群搭建-04安装配置HDFS Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hado ...
- hdu 5446 lucas+crt+按位乘
http://acm.hdu.edu.cn/showproblem.php?pid=5446 题意:题目意思很简单,要你求C(n,m)mod p的值 p=p1*p2*...pn; 题解:对于C(n,m ...
- Java生成随机数列表
生成随机数列表 1.Java8以前 (1)Math.random private List<UserEntity> random1() { ArrayList<UserEntity& ...
- 【shell脚本】字符串和数组的使用
字符串 可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析 #! /bin/bashusername="mayuan" str_1="hello ${user ...