k3s查看pod端口映射情况

在K3s或任何Kubernetes集群中,查看Pod的端口映射情况可以通过多种方式实现。以下是一些常用的方法来查看Pod的端口映射情况:

方法1:使用 kubectl describe pod

kubectl describe pod 命令提供了详细的信息,包括Pod的端口映射。以下是如何使用此命令的示例:

kubectl describe pod <pod-name> -n <namespace>

例如,如果你的Pod名称是 my-pod 并且位于 default 命名空间:

kubectl describe pod my-pod -n default

在输出中,你可以找到端口映射信息,如下所示:

Containers:
  mycontainer:
    Container ID:   docker://<container-id>
    Image:          <image-name>
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
    ...

方法2:检查Service

通常,Pod的端口映射是通过Service来管理的。你可以使用 kubectl get servicekubectl describe service 命令来查看Service的端口映射信息。

  1. 查看所有Service:

    kubectl get svc -n <namespace>
    
  2. 获取特定Service的详细信息:

    kubectl describe svc <service-name> -n <namespace>
    

例如:

kubectl describe svc my-service -n default

输出将显示Service的端口映射信息:

Type:                     ClusterIP
IP:                       10.96.0.1
Port:                     <port-name>  80/TCP
TargetPort:               8080/TCP
NodePort:                 <none>
Endpoints:                10.244.1.2:8080
...

方法3:通过Pod的配置文件检查

你可以查看Pod的YAML配置文件来了解端口映射情况。以下是一个Pod配置文件的示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: mycontainer
    image: myimage
    ports:
    - containerPort: 8080

在这个配置文件中,containerPort: 8080 表明容器在端口8080上监听。

方法4:使用 kubectl port-forward 来临时访问Pod端口

你可以使用 kubectl port-forward 命令来临时访问Pod的端口,从而验证端口映射是否按照预期工作:

kubectl port-forward pod/<pod-name> <local-port>:<pod-port> -n <namespace>

例如:

kubectl port-forward pod/my-pod 8080:8080 -n default

这将在本地机器的8080端口和Pod的8080端口之间建立临时隧道。

总结

查看K3s中Pod的端口映射情况可以通过以下几种方式:

  1. 使用 kubectl describe pod 查看Pod的详细信息。
  2. 查看Service的端口映射信息,使用 kubectl get svckubectl describe svc
  3. 查看Pod的YAML配置文件。
  4. 使用 kubectl port-forward 来临时访问Pod的端口。
<think>我们之前讨论的是使用Multipass创建虚拟机来运行K3s集群。现在用户希望使用Docker来创建K3s集群。注意,K3s可以直接在Docker容器中运行,因为K3s本身就是为容器和轻量级环境设计的。 使用Docker运行K3s有两种常见方式: 1. 使用`rancher/k3s`镜像运行单个节点的K3s集群(All in One)。 2. 使用Docker Compose运行多节点K3s集群(包括server和agent)。 由于用户要求的是创建集群的教程,我们首先介绍单节点(适合开发和测试),然后介绍多节点。 注意:在Docker中运行K3s,实际上是在容器内部运行K3s,所以容器本身就是一个K3s节点。 步骤概述: 1. 安装Docker(macOS上已经安装Docker Desktop)。 2. 运行K3s server容器(单节点)。 3. 获取kubeconfig文件以便在本地使用kubectl。 4. 部署多节点集群(可选,使用Docker Compose)。 但是,用户要求的是“集群”,所以我们将重点放在多节点上。不过,我们先从单节点开始,因为它是基础。 另外,监控部分:我们可以在集群中部署Prometheus和Grafana,或者按照用户之前的要求,通过一个Ubuntu虚拟机来监控。但这里我们直接在集群内部署监控组件,因为这样更符合Docker部署的简洁性。 不过,用户之前提到“通过Ubuntu虚拟机监控”,但我们现在使用Docker容器,所以监控也可以部署在同一个集群中(即运行在K3s集群的容器里)。这样更简单。 因此,我们调整方案: 1. 使用Docker创建K3s集群(多节点:一个server节点,一个或多个agent节点)。 2. 在集群内部署监控工具(Prometheus+Grafana)。 注意:由于我们使用Docker容器作为节点,这些容器运行在macOS的Docker中,所以整个集群都在本地Docker中。 步骤: 第一部分:使用Docker运行单节点K3s集群(快速开始) 1. 运行K3s server容器(单节点): ```bash docker run -d --name k3s-server --privileged --tmpfs /run --tmpfs /var/run -p 6443:6443 rancher/k3s:v1.27.2-k3s1 server ``` 注意:这里我们使用了`privileged`和`tmpfs`挂载,这是因为K3s需要这些权限来运行。同时,我们将API server的端口6443映射到主机,这样我们可以从macOS上访问。 2. 从容器中获取kubeconfig文件: ```bash docker cp k3s-server:/etc/rancher/k3s/k3s.yaml k3s.yaml ``` 然后修改k3s.yaml中的server地址为`https://localhost:6443`(因为我们将容器端口6443映射到了本地)。 3. 使用kubectl: 将kubeconfig文件放到`~/.kube/config`,或者使用`kubectl --kubeconfig k3s.yaml`。 但是,单节点集群并不适合生产,而且我们还没有加入工作节点。所以接下来我们使用Docker Compose创建多节点集群。 第二部分:使用Docker Compose创建多节点K3s集群 1. 创建docker-compose.yml文件,定义两个服务:server(控制平面)和agent(工作节点)。 2. 需要解决节点间通信问题,我们将它们放在同一个用户自定义网络中。 3. 注意:K3s server需要生成token,agent节点使用这个token加入集群。 4. 部署监控:在集群内部署Prometheus和Grafana(通过Helm)。 具体步骤: 步骤1:编写docker-compose.yml 我们创建一个docker-compose.yml文件,内容如下: ```yaml version: &#39;3&#39; services: server: image: rancher/k3s:v1.27.2-k3s1 command: server privileged: true tmpfs: - /run - /var/run environment: - K3S_TOKEN=mysupersecrettoken # 设置一个token,用于agent加入 ports: - "6443:6443" volumes: - ./k3s-server:/var/lib/rancher/k3s # 持久化存储,可选 agent: image: rancher/k3s:v1.27.2-k3s1 command: agent privileged: true tmpfs: - /run - /var/run environment: - K3S_URL=https://server:6443 - K3S_TOKEN=mysupersecrettoken depends_on: - server volumes: - ./k3s-agent:/var/lib/rancher/k3s # 持久化存储,可选 # 将server和agent放在同一个网络,这样agent可以通过服务名server访问 networks: default: name: k3s-network driver: bridge ``` 步骤2:启动集群 ```bash docker-compose up -d ``` 步骤3:获取kubeconfig文件 我们需要从server容器中复制kubeconfig文件: ```bash docker-compose exec server cat /etc/rancher/k3s/k3s.yaml > k3s.yaml ``` 修改k3s.yaml中的server地址为`https://localhost:6443`(因为我们将server的6443端口映射到了本地)。 然后设置环境变量使用这个配置文件: ```bash export KUBECONFIG=$(pwd)/k3s.yaml ``` 步骤4:验证集群 ```bash kubectl get nodes ``` 应该看到server和agent节点(可能名称是docker-compose服务名加上容器ID的一部分)。 第三部分:部署监控系统 我们使用Helm在集群内部部署kube-prometheus-stack。 1. 在macOS上安装kubectl和helm(如果还没有安装): ```bash brew install kubectl helm ``` 2. 添加Prometheus Helm仓库: ```bash helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update ``` 3. 安装kube-prometheus-stack: ```bash kubectl create namespace monitoring helm install monitoring prometheus-community/kube-prometheus-stack -n monitoring ``` 4. 访问Grafana: 我们需要将Grafana服务端口转发到本地: ```bash kubectl port-forward -n monitoring svc/monitoring-grafana 3000:80 ``` 然后在浏览器中访问:http://localhost:3000,用户名是admin,密码可以通过以下命令获取: ```bash kubectl get secret -n monitoring monitoring-grafana -o jsonpath=&#39;{.data.admin-password}&#39; | base64 -d ``` 注意:由于我们的集群运行在Docker容器中,而监控组件也运行在集群中,所以通过端口转发就可以在macOS上访问。 架构示意图: ``` macOS Host (Docker) ├── k3s-server (容器) # K3s控制平面 ├── k3s-agent (容器) # K3s工作节点 └── 监控组件运行在K3s集群的Pod中(Prometheus, Grafana等) ``` 关键注意事项: 1. 持久化:上述docker-compose中使用了本地卷,这样重启容器后数据不会丢失(但卷在主机上,所以删除容器卷还在)。 2. 网络:docker-compose创建了一个网络,server和agent可以通过服务名通信。 3. 资源:根据需要调整Docker容器的资源限制(在docker-compose.yml中可以使用`deploy.resources`或者`cpus`和`mem_limit`等,但注意版本差异)。 4. 安全:token是明文,请在生产环境中使用更安全的方式。 相关问题: 1. 如何添加更多的agent节点? 2. 如何升级K3s集群的版本? 3. 如何备份和恢复K3s集群? 4. 如何配置持久化存储(如Longhorn)? 现在,我们按照上述步骤编写教程。</think>### 使用 Docker 创建 K3s 集群教程 #### 核心概念说明 K3s 是轻量级 Kubernetes 发行版,专为资源受限环境设计。通过 Docker 容器化部署 K3s 节点,可实现: 1. **快速启动**:容器化节点秒级启动 2. **资源隔离**:每个节点独立容器环境 3. **简化管理**:Docker 命令统一管理集群 4. **跨平台支持**:macOS/Linux/Windows 通用方案 #### 环境准备 1. **安装 Docker Desktop**: ```bash brew install --cask docker ``` 2. **启用 Kubernetes 支持**(需禁用 Docker 内置 Kubernetes): ```bash Docker Desktop → Settings → Kubernetes → Disable Kubernetes ``` #### 单节点集群部署 ```bash # 启动 K3s 服务器容器 docker run -d --name k3s-server \ --privileged \ --tmpfs /run \ --tmpfs /var/run \ -p 6443:6443 \ rancher/k3s:v1.27.2-k3s1 \ server # 获取 kubeconfig 文件 docker cp k3s-server:/etc/rancher/k3s/k3s.yaml k3s.yaml sed -i &#39;&#39; &#39;s/127.0.0.1/localhost/g&#39; k3s.yaml # 替换 IP # 验证集群 export KUBECONFIG=$(pwd)/k3s.yaml kubectl get nodes ``` **输出示例**: ``` NAME STATUS ROLES AGE VERSION k3s-server Ready master 45s v1.27.2+k3s1 ``` #### 多节点集群部署 ```yaml # docker-compose.yml version: &#39;3&#39; services: server: image: rancher/k3s:v1.27.2-k3s1 command: server privileged: true tmpfs: - /run - /var/run ports: - "6443:6443" environment: K3S_TOKEN: "mysupersecret" # 节点认证密钥 agent1: image: rancher/k3s:v1.27.2-k3s1 command: agent privileged: true tmpfs: - /run - /var/run environment: K3S_URL: "https://server:6443" K3S_TOKEN: "mysupersecret" depends_on: - server agent2: image: rancher/k3s:v1.27.2-k3s1 command: agent privileged: true tmpfs: - /run - /var/run environment: K3S_URL: "https://server:6443" K3S_TOKEN: "mysupersecret" depends_on: - server ``` 启动集群: ```bash docker-compose up -d kubectl get nodes -w # 观察节点加入状态 ``` #### 监控系统部署 ```bash # 创建监控命名空间 kubectl create namespace monitoring # 安装 Prometheus Operator helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install kube-prom prometheus-community/kube-prometheus-stack -n monitoring # 端口转发访问 Grafana kubectl port-forward -n monitoring svc/kube-prom-grafana 3000:80 ``` 访问 `http://localhost:3000`,用户名 `admin`,密码获取: ```bash kubectl get secret -n monitoring kube-prom-grafana -o jsonpath=&#39;{.data.admin-password}&#39; | base64 -d ``` #### 架构拓扑 ```mermaid graph TD A[macOS Host] --> B[Docker Engine] B --> C1[K3s Server] B --> C2[K3s Agent 1] B --> C3[K3s Agent 2] C1 --> D[Prometheus] C1 --> E[Grafana] C2 --> D C3 --> D ``` #### 关键配置说明 1. **特权模式**:`--privileged` 允许容器访问主机设备 2. **tmpfs 挂载**:解决容器内 systemd 兼容性问题 3. **网络配置**: ```bash # 查看容器网络 docker network inspect <network_id> ``` 4. **持久化存储**: ```yaml volumes: - ./k3s-data:/var/lib/rancher/k3s ``` #### 常见问题解决 1. **节点 Not Ready**: ```bash docker logs k3s-server # 检查服务日志 kubectl describe node <node-name> ``` 2. **证书错误**: ```bash docker exec k3s-server k3s kubectl get csr -A | grep Pending kubectl certificate approve <csr-name> ``` 3. **资源限制**(Docker Desktop → Resources): - 建议分配:CPU ≥2核,内存 ≥4GB,交换空间 ≥1GB --- ### 相关问题 1. **如何在 Docker 部署的 K3s 集群中实现持久化存储?** (涉及 Longhorn 或 NFS 子系统的配置) 2. **如何将 K3s Docker 集群接入 CI/CD 流水线?** (GitLab Runner 或 Argo CD 集成方案) 3. **K3s 集群的安全加固有哪些最佳实践?** (RBAC 策略、网络策略、证书轮换等) 4. **如何监控 K3s 本身的资源消耗?** (cAdvisor 集成与容器级指标采集)[^1] [^1]: Rancher 官方文档:K3s 生产环境高可用指南。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值