一、kubernetes及pod介绍
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它最初由 Google 设计,现由云原生计算基金会(CNCF)维护。
### 主要功能
1. **自动化部署与扩展**:Kubernetes 能根据资源需求自动部署和扩展应用。
2. **负载均衡**:自动分配网络流量,确保应用稳定运行。
3. **自我修复**:自动重启或替换故障容器,保持应用高可用。
4. **存储编排**:支持多种存储系统,自动挂载所需存储。
5. **配置与密钥管理**:集中管理配置和敏感信息,确保安全。
6. **批处理执行**:支持一次性任务和定时任务。
### 核心概念
1. **Pod**:最小的部署单元,包含一个或多个容器。
2. **Service**:定义如何访问一组 Pod,提供稳定的网络端点。
3. **Deployment**:管理 Pod 的部署和更新。
4. **Node**:运行容器的工作节点。
5. **Namespace**:用于资源隔离,支持多团队共享集群。
### 应用场景
1. **微服务架构**:适合管理复杂的微服务应用。
2. **持续集成与持续部署(CI/CD)**:与 CI/CD 工具集成,实现自动化发布。
3. **混合云与多云环境**:支持跨云平台的应用部署。
4. **大规模应用管理**:高效管理大规模容器化应用。
### 优势
1. **可移植性**:支持跨平台部署,避免供应商锁定。
2. **扩展性**:轻松扩展应用规模。
3. **社区支持**:拥有活跃的社区和丰富的生态系统。
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它最初由 Google 设计,现由云原生计算基金会(CNCF)维护。
### 主要功能
1. **自动化部署与扩展**:Kubernetes 能根据资源需求自动部署和扩展应用。
2. **负载均衡**:自动分配网络流量,确保应用稳定运行。
3. **自我修复**:自动重启或替换故障容器,保持应用高可用。
4. **存储编排**:支持多种存储系统,自动挂载所需存储。
5. **配置与密钥管理**:集中管理配置和敏感信息,确保安全。
6. **批处理执行**:支持一次性任务和定时任务。
### 核心概念
1. **Pod**:最小的部署单元,包含一个或多个容器。
2. **Service**:定义如何访问一组 Pod,提供稳定的网络端点。
3. **Deployment**:管理 Pod 的部署和更新。
4. **Node**:运行容器的工作节点。
5. **Namespace**:用于资源隔离,支持多团队共享集群。
### 应用场景
1. **微服务架构**:适合管理复杂的微服务应用。
2. **持续集成与持续部署(CI/CD)**:与 CI/CD 工具集成,实现自动化发布。
3. **混合云与多云环境**:支持跨云平台的应用部署。
4. **大规模应用管理**:高效管理大规模容器化应用。
### 优势
1. **可移植性**:支持跨平台部署,避免供应商锁定。
2. **扩展性**:轻松扩展应用规模。
3. **社区支持**:拥有活跃的社区和丰富的生态系统。
### 总结
Kubernetes 是容器化应用管理的强大工具,适用于多种场景,能够显著提升开发和运维效率。
二、实战运维
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-test 1/1 Running 0 98s
[root@master ~]# cd pod/
[root@master pod]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
[root@master pod]# kubectl get pod -l app=tomcat
NAME READY STATUS RESTARTS AGE
tomcat-test 1/1 Running 0 3m6s
[root@master pod]# kubectl delete pod tomcat-test
pod "tomcat-test" deleted
以下是对这些命令的详细解释:
### 1. `kubectl get pods`
```bash
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-test 1/1 Running 0 98s
```
- **作用**:列出当前命名空间中的所有 Pod。
- **输出**:
- `NAME`:Pod 名称,这里是 `tomcat-test`。
- `READY`:Pod 中容器的就绪状态,`1/1` 表示 1 个容器已就绪。
- `STATUS`:Pod 的当前状态,`Running` 表示正在运行。
- `RESTARTS`:容器重启次数,`0` 表示未重启。
- `AGE`:Pod 的运行时间,`98s` 表示已运行 98 秒。
### 2. `cd pod/`
```bash
[root@master ~]# cd pod/
```
- **作用**:切换到 `pod` 目录,通常用于存放 Kubernetes 资源定义文件。
### 3. `cat pod-tomcat.yaml`
```bash
[root@master pod]# cat pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
```
- **作用**:显示 `pod-tomcat.yaml` 文件内容。
- **内容**:
- `apiVersion: v1`:Kubernetes API 版本。
- `kind: Pod`:资源类型为 Pod。
- `metadata`:Pod 的元数据,包括名称、命名空间和标签。
- `spec`:Pod 的规格,定义了容器名称、端口、镜像等。
### 4. `kubectl get pod -l app=tomcat`
```bash
[root@master pod]# kubectl get pod -l app=tomcat
NAME READY STATUS RESTARTS AGE
tomcat-test 1/1 Running 0 3m6s
```
- **作用**:列出带有标签 `app=tomcat` 的 Pod。
- **输出**:与第一个命令类似,但只显示带有指定标签的 Pod。
### 5. `kubectl delete pod tomcat-test`
```bash
[root@master pod]# kubectl delete pod tomcat-test
pod "tomcat-test" deleted
```
- **作用**:删除名为 `tomcat-test` 的 Pod。
- **输出**:确认 Pod 已被删除。
### 总结
这些命令展示了如何查看、定义、筛选和删除 Kubernetes 中的 Pod。通过这些操作,可以有效地管理容器化应用。
基于deployment创建pod
[root@master pod]# kubectl apply -f nginx-deploy.yaml
deployment.apps/nginx-test created
[root@master pod]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-test-5fbcf9f6-rtvdw 1/1 Running 0 5s
nginx-test-5fbcf9f6-zgtv9 1/1 Running 0 5s
[root@master pod]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-test 2/2 2 2 9s
[root@master pod]# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
labels:
app: nginx-deploy
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: my-nginx
image: xianchao/nginx:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
1. apiVersion: apps/v1
-
含义:指定使用的 Kubernetes API 版本,
apps/v1
适用于 Deployment、StatefulSet 等资源。
2. kind: Deployment
-
含义:定义资源类型为
Deployment
,用于管理 Pod 的部署和更新。
3. metadata
-
含义:资源的元数据。
-
name: nginx-test:Deployment 的名称为
nginx-test
。 -
labels:为 Deployment 添加标签
app: nginx-deploy
,便于识别和管理。
-
4. spec
-
含义:Deployment 的规格,定义了期望状态。
4.1 selector
-
含义:定义 Deployment 如何选择管理的 Pod。
-
matchLabels:选择标签为
app: nginx
的 Pod。
-
4.2 replicas: 2
-
含义:指定 Pod 的副本数为 2,即同时运行 2 个相同的 Pod。
4.3 template
-
含义:定义 Pod 的模板,用于创建 Pod。
4.3.1 metadata
-
含义:Pod 的元数据。
-
labels:为 Pod 添加标签
app: nginx
,与selector
中的matchLabels
匹配。
-
4.3.2 spec
-
含义:Pod 的规格,定义容器及其配置。
4.3.2.1 containers
-
含义:定义 Pod 中的容器列表。
4.3.2.2 - name: my-nginx
-
含义:容器名称为
my-nginx
。
4.3.2.3 image: xianchao/nginx:v1
-
含义:使用镜像
xianchao/nginx:v1
启动容器。
4.3.2.4 imagePullPolicy: IfNotPresent
-
含义:镜像拉取策略为
IfNotPresent
,即本地存在则不拉取。
4.3.2.5 ports
-
含义:定义容器暴露的端口。
-
- containerPort: 80:容器监听 80 端口。
-
总结
这个配置文件定义了一个名为 nginx-test
的 Deployment,它会创建 2 个运行 xianchao/nginx:v1
镜像的 Pod,每个 Pod 监听 80 端口,并通过标签 app: nginx
进行管理。