Kubernetes入门:从部署到扩展应用
立即解锁
发布时间: 2025-08-21 00:51:29 阅读量: 2 订阅数: 11 


Kubernetes实战:从入门到精通
# Kubernetes入门:搭建集群、部署应用与水平扩展
## 1. 获取对象详细信息
在Kubernetes中,若要查看对象的详细信息,可使用`kubectl describe`命令。例如,查看特定节点的详细信息:
```bash
$ kubectl describe node gke-kubia-85f6-node-0rrx
```
此命令的输出包含节点状态、CPU和内存数据、系统信息以及运行在该节点上的容器等内容。若不指定节点名称,直接运行`kubectl describe node`,则会输出所有节点的详细描述。
**提示**:当某一类型的对象只有一个时,不指定对象名称运行`describe`和`get`命令可节省输入或复制粘贴对象名称的时间。
## 2. 设置kubectl别名和命令行补全
### 2.1 创建别名
由于`kubectl`使用频繁,每次输入完整命令较为繁琐。可通过在`~/.bashrc`或等效文件中添加以下行来创建别名:
```bash
alias k=kubectl
```
**注意**:若使用`gcloud`设置集群,可能已有`k`可执行文件。
### 2.2 配置kubectl的Tab补全
即便使用了短别名`k`,输入量仍可能较多。幸运的是,`kubectl`可为`bash`和`zsh` shell输出补全代码,不仅能补全命令名,还能补全实际对象名。例如:
```bash
$ kubectl desc<TAB> no<TAB> gke-ku<TAB>
```
要在`bash`中启用Tab补全,需先安装`bash-completion`包,然后运行以下命令(建议将其添加到`~/.bashrc`或等效文件中):
```bash
$ source <(kubectl completion bash)
```
但存在一个问题,运行上述命令后,Tab补全仅在使用完整的`kubectl`名称时生效,使用`k`别名时无效。可通过以下命令解决:
```bash
$ source <(kubectl completion bash | sed s/kubectl/k/g)
```
**注意**:撰写本文时,MacOS上的别名补全功能暂不可用。若要使用补全功能,需使用完整的`kubectl`命令名。
## 3. 运行第一个Kubernetes应用
### 3.1 部署Node.js应用
部署应用的最简单方法是使用`kubectl run`命令,该命令可创建所有必要组件,无需处理JSON或YAML文件。以下是在Kubernetes中运行之前创建并推送到Docker Hub的镜像的命令:
```bash
$ kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1
```
此命令会创建一个名为`kubia`的`ReplicationController`。其中,`--image=luksa/kubia`指定要运行的容器镜像,`--port=8080`告知Kubernetes应用监听的端口。`--generator`标志用于指定创建的对象类型,这里指定创建`ReplicationController`而非`Deployment`。
### 3.2 介绍Pods
Kubernetes并不直接处理单个容器,而是使用`Pod`的概念。`Pod`是一组紧密相关的容器,它们始终在同一工作节点和相同的Linux命名空间中运行。每个`Pod`就像一个独立的逻辑机器,拥有自己的IP地址、主机名和进程等。
### 3.3 列出Pods
由于无法直接列出单个容器,可使用以下命令列出`Pods`:
```bash
$ kubectl get pods
```
输出示例:
| NAME | READY | STATUS | RESTARTS | AGE |
| ------------- | ----- | ------- | -------- | --- |
| kubia-4jfyf | 0/1 | Pending | 0 | 1m |
此`Pod`的状态为`Pending`,表示其单个容器尚未准备好。原因是分配给该`Pod`的工作节点正在下载容器镜像。下载完成后,`Pod`将进入`Running`状态:
```bash
$ kubectl get pods
```
输出示例:
| NAME | READY | STATUS | RESTARTS | AGE |
| ------------- | ----- | ------- | -------- | --- |
| kubia-4jfyf | 1/1 | Running | 0 | 5m |
若要查看`Pod`的更多信息,可使用`kubectl describe pod`命令。若`Pod`一直处于`Pending`状态,可能是Kubernetes无法从镜像仓库拉取镜像。若使用自己的镜像,需确保其在Docker Hub上为公开状态,可在其他机器上使用`docker pull`命令手动拉取镜像进行验证。
### 3.4 幕后原理
以下是在Kubernetes中运行容器镜像的主要步骤:
1. 构建镜像并推送到Docker Hub。
2. 运行`kubectl`命令,通过向Kubernetes API服务器发送REST HTTP请求创建新的`ReplicationController`对象。
3. `ReplicationController`创建新的`Pod`,并由调度器将其分配到某个工作节点。
4. 该节点上的`Kubelet`发现`Pod`已分配给自己,指示Docker从镜像仓库拉取指定镜像。
5. 镜像下载完成后,Docker创建并运行容器。
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(本地开发机器):::process -->|1. docker push luksa/kubia| B(Docker Hub):::process
C(kubectl):::process -->|3. kubectl run kubia --image=luksa/kubia --port=8080| D(REST API服务器):::process
D -->|4. REST调用| E(调度器):::process
E -->|5. Pod创建并调度到工作节点| F(工作节点1):::process
F -->|6. Kubelet通知| G(Kubelet):::process
G -->|7. Kubelet指示Docker运行镜像| H(Docker):::process
B -->|8. Docker拉取并运行luksa/kubia| H
```
## 4. 访问Web应用
### 4.1 创建服务对象
由于每个`Pod`的IP地址是集群内部的,外部无法访问。为使`Pod`可从外部访问,需通过`Service`对象进行暴露。这里创建一个`LoadBalancer`类型的服务:
```bash
$ kubectl exp
```
0
0
复制全文
相关推荐










