多容器Pod与有状态集:扩展应用与运行数据密集型应用的解决方案
立即解锁
发布时间: 2025-08-12 00:06:58 阅读量: 7 订阅数: 16 


Kubernetes实战:从入门到精通
### 多容器Pod与有状态集:扩展应用与运行数据密集型应用的解决方案
#### 1. 大使容器抽象连接
大使模式能够控制并简化应用程序的出站连接。应用程序向本地地址发起网络请求,这些请求由大使容器接收并执行。我们可以使用通用的大使容器,或者针对应用程序组件定制的大使容器。大使容器中的逻辑可能旨在提高性能、增强可靠性或安全性。
##### 1.1 大使模式示例
以随机数应用为例,有一个运行在Pod中的Web应用,它使用另一个Pod中运行的API。在初始部署时,Web应用容器可以访问任何网络地址,这存在安全风险。
操作步骤如下:
1. 部署应用和服务:
```bash
kubectl apply -f numbers/
```
2. 查找应用的URL:
```bash
kubectl get svc numbers-web -o jsonpath='http://{.status.loadBalancer.ingress[0].*}:8090'
```
3. 浏览获取随机数,并检查Web应用是否可以访问其他端点:
```bash
kubectl exec deploy/numbers-web -c web -- wget -q -O - http://timecheck:8080
```
##### 1.2 使用代理容器作为大使
可以使用简单的代理容器作为大使来更新Web应用规范,示例代码如下:
```yaml
containers:
- name: web
image: kiamol/ch03-numbers-web
env:
- name: http_proxy # Sets the container to use the proxy
value: http://localhost:1080 # so traffic goes to the ambassador
- name: RngApi__Url
value: http://localhost/api # Uses a localhost address for the API
- name: proxy
image: kiamol/ch07-simple-proxy # This is a basic HTTP proxy.
env:
- name: Proxy__Port # Routes network requests from the app
value: "1080" # using the configured URI mapping
- name: Proxy__Request__UriMap__Source
value: http://localhost/api
- name: Proxy__Request__UriMap__Target
value: http://numbers-api/sixeyed/kiamol/master/ch03/numbers/rng
```
操作步骤如下:
1. 应用更新:
```bash
kubectl apply -f numbers/update/web-with-proxy.yaml
```
2. 刷新浏览器获取新的随机数。
3. 检查代理容器日志:
```bash
kubectl logs -l app=numbers-web -c proxy
```
4. 尝试读取时间检查应用的健康端点:
```bash
kubectl exec deploy/numbers-web -c web -- wget -q -O - http://timecheck:8080
```
5. 再次检查代理日志:
```bash
kubectl logs -l app=numbers-web -c proxy
```
通过这种方式,Web应用与API进一步解耦,并且网络访问受到限制,所有请求都由代理记录。
#### 2. 理解Pod环境
Pod是一个或多个容器的边界,就像容器是一个或多个进程的边界一样。Pod可以创建虚拟化层而不增加开销,因此具有灵活性和高效性,但使用多容器Pod也存在一些复杂性。
##### 2.1 Pod的就绪状态
Pod是单个计算单元,只有当Pod中的所有容器都就绪时,Pod才会被认为是就绪的,服务也只会将流量发送到就绪的Pod。添加边车容器和初始化容器会增加应用程序的故障模式。
例如,如果初始化容器失败,应用程序可能无法更新。操作步骤如下:
1. 应用更新:
```bash
kubectl apply -f numbers/update/web-v2-broken-init-container.yaml
```
2. 检查新的
0
0
复制全文
相关推荐









