一、安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable docker
镜像加速(本文使用阿里云镜像):
1 | ## vi /etc/docker/daemon.json |
备注:本文使用的镜像为 luksa/kubia,是《Kubernetes in Action》中使用的镜像,其为一个简单的 Node.js 应用:
1 | const http = require('http'); |
Dockerfile 文件的内容为:
1 | FROM node:7 |
二、配置 k8s 集群
Minikube 是一个构建单节点集群的工具,是运行 Kubemetes 集群最简单、最快捷的途径
2.1. 安装 kubectl
官方给出地址是:https://storage.googleapis.com ,需要梯子才能使用,改为使用阿里云的下载地址:
curl -Lo kubectl http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.20.0/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl
验证是否成功:
kubectl version --client
2.2. 安装 minikube
同样使用阿里云的下载地址:
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.16.0/minikube-linux-amd64 && chmod +x ./minikube && mv ./minikube /usr/local/bin/minikube
启动集群:
minikube start --driver=none
查看集群(前提是已经安装了 kubectl):
kubectl get pod -A # pod 可以缩写为 po
遇到的报错:
- Sorry, Kubernetes 1.20.0 requires conntrack to be installed in root’s path
1 | ## 安装 conntrack: |
- /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables #/pro的配置文件根据实际环境来
三、部署应用
3.1. 部署应用
kubectl create deployment hello-minikube --image=luksa/kubia
3.1.1. pod
一个 pod 是一组紧密相关的容器,它们总是一起运行在同一个工作节上,以及同一个 Linux 命名空间中。每个 pod 就像一个独立的逻辑机器,拥有自己的 IP、主机名、进程等,运行一个独立的应用程序。应用程序可以是单个进程,运行在单个容器中,也可以是一个主应用进程或者其他支持进程,每个进程都在自己的容器中运行一个 pod 的所有容器都运行在同一个逻辑机器上,而其他 pod 中的容器,即使运行在同个工作节点上,也会出现在不同的节点上。

可以通过下面命令查看 pod 列表:
1 | kubectl get pods |
3.2. 创建服务对象
每个 pod 都有自己的 IP 地址,但是这个地址是集群内部的,不能从集群外部访问。要让 pod 能够从外部访问,需要通过服务对象公开它,要创建一个特殊的 LoadBalancer 类型的服务。因为如果你创建一个常规服务(一个 ClusterIP 服务),比如 pod,它只能从集群内部访问。通过创建 LoadBalancer 类型的服务,将创建一个外部的负载均衡,可以通过负载均衡的公共 IP 访问 pod
kubectl expose deployment hello-minikube --type=NodePort --port=8080
可以通过下面命令查看服务列表:
kubectl get services
如果执行上面的命令可以看到服务是没有外部 IP 的,可以使用下面命令为其分配端口:
1 | minikube service hello-minikube |
也可以使用下面命令指定端口:
1 | kubectl port-forward service/hello-minikube 7080:8080 |
3.3. 水平伸缩应用
可以通过下面命令查看 Deployment 列表:
kubectl get deployments
默认只有 1 个 pod 副本,可以增加 pod 副本的数量:
kubectl scale deployment hello-minikube --replicas 3
再次执行查看 Deployment 列表命令,可以看到目标数量变成了 3(需要等待一段时间 3 个 pod 才能都启动),等 3 个 pod 都成功启动后,多次调用接口,可以看到有不同的输出:
1 | curl http://192.168.12.130:31526 # 31526 为本文分配的端口 |
参考:
- 《Kubernetes in Action》
- Install and Set Up kubectl
- minikube start