深入探索Kubernetes微服务与自动化部署
立即解锁
发布时间: 2025-08-11 17:03:41 阅读量: 13 订阅数: 27 


Java微服务与容器化部署实践
### 深入探索Kubernetes微服务与自动化部署
#### 1. 消息导向的Kubernetes微服务
在这个项目里,有两个呈现服务或者说用户界面(UI)服务:
- `http://products.acme.test`:用户能够与产品Web微服务进行交互。
- `http://adminer.acme.test`:用户可以和PostgreSQL数据库进行交互。
下面是项目的源代码组织情况:
```
./ch11-03/
├── 01-ProductServer
│ ├── make.sh
│ ├── pom.xml
│ └── src
│ └── main
├── 02-ProductWeb
│ ├── make.sh
│ ├── pom.xml
│ └── src
│ └── main
├── Dockerfile
├── README.txt
├── adminer-deployment.yaml
├── adminer-svc.yaml
├── clean.sh
├── ingress-controller.yaml
├── makeandrun.sh
├── pom.xml
├── postgres-config.yml
├── postgres-deployment.yml
├── postgres-pvc.yml
├── postgres-svc.yml
├── product-server-deployment.yml
├── product-server-service.yml
├── product-web-deployment.yml
└── product-web-service.yml
```
##### 1.1 Ingress部署
Ingress是Kubernetes里用于管理外部对集群内服务访问的对象。以下是Ingress的Pod定义YAML文件:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: "adminer.acme.test"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: adminer
port:
number: 8080
- host: "products.acme.test"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: product-web
port:
number: 8080
```
在这个文件中,我们定义了两个规则:
- 所有来自`adminer.acme.test`主机的请求会被路由到名为`adminer`的ClusterIP。
- 所有来自`products.acme.test`主机的请求会被路由到名为`product-web`的ClusterIP。
##### 1.2 Adminer部署
Adminer是PostgreSQL数据库的一个用户界面。以下是Adminer的Pod定义YAML文件:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: adminer
labels:
app: adminer
group: db
spec:
replicas: 1
selector:
matchLabels:
app: adminer
template:
metadata:
labels:
app: adminer
group: db
spec:
containers:
- name: adminer
image: adminer:4.8.1-standalone
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
env:
- name: ADMINER_DESIGN
value: pepa-linha
- name: ADMINER_DEFAULT_SERVER
value: postgres
```
同时,还定义了Adminer的服务:
```yaml
apiVersion: v1
kind: Service
metadata:
name: adminer
labels:
group: db
spec:
type: ClusterIP
selector:
app: adminer
ports:
- port: 8080
targetPort: 8080
```
##### 1.3 运行Ingress和微服务
假设单节点Kubernetes集群Minikube已经启动并运行,并且已经按照要求启用了Ingress插件。可以使用以下脚本构建并运行整个应用:
```bash
(base) binildass-MacBook-Pro:ch11-03 binil$ eval $(minikube docker-env)
(base) binildass-MacBook-Pro:ch11-03 binil$ pwd
/Users/binil/binil/code/mac/mybooks/docker-04/Code/ch11/ch11-03
(base) binildass-MacBook-Pro:ch11-03 binil$ eval $(minikube docker-env)
(base) binildass-MacBook-Pro:ch11-03 binil$ sh makeandrun.sh
```
##### 1.4 描述Ingress
当Pod启动并运行后,可以使用以下命令描述Ingress对象:
```bash
(base) binildass-MacBook-Pro:~ binil$ kubectl describe ingress
```
输出结果如下:
```
Name: ingress-service
Labels: <none>
Namespace: default
Address: 192.168.64.6
Ingress Class: <none>
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
adminer.acme.test
/ adminer:8080 (10.244.1.234:8080)
products.acme.test
/ product-web:8080 (10.244.1.233:8080)
Annotations: kubernetes.io/ingress.class: nginx
Events:
Type Reason Age From Message
---- ---
```
0
0
复制全文
相关推荐










