k8s (一) 学习环境 Kubernetes 集群搭建

一、安装 Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
镜像加速(本文使用阿里云镜像):

## vi /etc/docker/daemon.json
{"registry-mirrors":["https://<你的ID>.mirror.aliyuncs.com"]}
## systemctl daemon-reload
## systemctl restart docker

备注:本文使用的镜像为 luksa/kubia,是《Kubernetes in Action》中使用的镜像,其为一个简单的 Node.js 应用:

const http = require('http');
const os = require('os');
console.log("Kubia server starting...");
var handler = function(request, response) {
console.log("Received request form " + request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);

Dockerfile 文件的内容为:

FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]

二、配置 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
遇到的报错:

  1. Sorry, Kubernetes 1.20.0 requires conntrack to be installed in root’s path
    ## 安装 conntrack:
    yum install conntrack
    
  2. /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 列表:
    kubectl get pods
    kubectl get pods -o wide # 显示 pod 运行的 IP 和所运行的节点
    

    3.2. 创建服务对象

    每个 pod 都有自己的 IP 地址,但是这个地址是集群内部的,不能从集群外部访问。要让 pod 能够从外部访问,需要通过服务对象公开它,要创建一个特殊的 LoadBalancer 类型的服务。因为如果你创建一个常规服务(一个 ClusterIP 服务),比如 pod,它只能从集群内部访问。通过创建 LoadBalancer 类型的服务,将创建一个外部的负载均衡,可以通过负载均衡的公共 IP 访问 pod
    kubectl expose deployment hello-minikube --type=NodePort --port=8080
    可以通过下面命令查看服务列表:
    kubectl get services
    如果执行上面的命令可以看到服务是没有外部 IP 的,可以使用下面命令为其分配端口:
    minikube service hello-minikube
    # 本文分配的端口为:31526
    
    也可以使用下面命令指定端口:
    kubectl port-forward service/hello-minikube 7080:8080
    # 可以通过 http://localhost:7080 访问
    

    3.3. 水平伸缩应用

可以通过下面命令查看 Deployment 列表:
kubectl get deployments
默认只有 1 个 pod 副本,可以增加 pod 副本的数量:
kubectl scale deployment hello-minikube --replicas 3
再次执行查看 Deployment 列表命令,可以看到目标数量变成了 3(需要等待一段时间 3 个 pod 才能都启动),等 3 个 pod 都成功启动后,多次调用接口,可以看到有不同的输出:

curl http://192.168.12.130:31526 # 31526 为本文分配的端口
## You've hit hello-minikube-6895494d6d-wsfmx
## You've hit hello-minikube-6895494d6d-cbsnz
## You've hit hello-minikube-6895494d6d-rvgvw

参考:

  1. 《Kubernetes in Action》
  2. Install and Set Up kubectl
  3. minikube start
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章