Skip to content

使用minikube搭建kubernetes集群环境

minikube是一个轻量级的kubernetes集群环境,可以用来在本地快速搭建一个单节点的kubernetes集群,

安装minikube

也可以到官网直接下载安装包来安装:https://minikube.sigs.k8s.io/docs/start/

shell
# macOS
brew install minikube

# Windows
choco install minikube

# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

启动minikube

shell
# 启动minikube
minikube start

使用Multipassk3s搭建kubernetes集群环境

minikube只能用来在本地搭建一个单节点的kubernetes集群环境,下面介绍如何使用Multipassk3s来搭建一个多节点的kubernetes集群环境。

Multipass介绍

Multipass是一个轻量级的虚拟机管理工具,可以用来在本地快速创建和管理虚拟机,相比于VirtualBox或者VMware这样的虚拟机管理工具,Multipass更加轻量快速,而且它还提供了一些命令行工具来方便我们管理虚拟机。

官方网址: https://Multipass.run/

安装Multipass

shell
# macOS
brew install multipass

# Windows
choco install multipass

# Linux
sudo snap install multipass

Multipass常用命令

关于Multipass的一些常用命令我们可以通过multipass help来查看,这里只需要记住几个常用的命令就可以了

shell
# 查看帮助
multipass help
multipass help <command>

# 创建一个名字叫做k3s的虚拟机
multipass launch --name k3s

# 在虚拟机中执行命令
multipass exec k3s -- ls -l

# 进入虚拟机并执行shell
multipass shell k3s

# 查看虚拟机的信息
multipass info k3s

# 停止虚拟机
multipass stop k3s

# 启动虚拟机
multipass start k3s

# 删除虚拟机
multipass delete k3s

# 清理虚拟机
multipass purge

# 查看虚拟机列表
multipass list

# 挂载目录(将本地的~/kubernetes/master目录挂载到虚拟机中的~/master目录)
multipass mount ~/kubernetes/master master:~/master

Multipass有个问题,每次Mac升级之后Multipass的虚拟机都可能会被删除。

shell
# 镜像位置
/var/root/Library/Application Support/multipassd/qemu/vault/instances
# 配置文件
/var/root/Library/Application Support/multipassd/qemu/multipassd-vm-instances.json

k3s介绍

k3s 是一个轻量级的Kubernetes发行版,它是 Rancher Labs 推出的一个开源项目,旨在简化Kubernetes的安装和维护,同时它还是CNCF认证的Kubernetes发行版。

创建和配置master节点

首先我们需要使用multipass创建一个名字叫做k3s的虚拟机,

shell
multipass launch --name k3s --cpus 2 --memory 8G --disk 10G

虚拟机创建完成之后,可以配置SSH密钥登录,不过这一步并不是必须的,即使不配置也可以通过multipass exec或者multipass shell命令来进入虚拟机,然后我们需要在master节点上安装k3s

使用k3s搭建kubernetes集群非常简单,只需要执行一条命令就可以在当前节点上安装k3s,打开刚刚创建的k3s虚拟机,执行下面的命令就可以安装一个k3s的master节点。

shell
# 安装k3s的master节点
curl -sfL https://get.k3s.io | sh -

# 国内可以使用ranher的镜像源来安装:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

安装完成之后,可以通过kubectl命令来查看集群的状态。

shell
sudo kubectl get nodes

创建和配置worker节点

接下来需要在这个master节点上获取一个token,用来作为创建worker节点时的一个认证凭证,它保存在/var/lib/rancher/k3s/server/node-token这个文件里面,我们可以使用sudo cat命令来查看一下这个文件中的内容。

shell
sudo cat /var/lib/rancher/k3s/server/node-token

将TOKEN保存到一个环境变量中

shell
TOKEN=$(multipass exec k3s sudo cat /var/lib/rancher/k3s/server/node-token)

保存master节点的IP地址

shell
MASTER_IP=$(multipass info k3s | grep IPv4 | awk '{print $2}')

确认:

shell
echo $MASTER_IP

使用刚刚的TOKENMASTER_IP来创建两个worker节点,并把它们加入到集群中

shell
# 创建两个worker节点的虚拟机
multipass launch --name worker1 --cpus 2 --memory 8G --disk 10G
multipass launch --name worker2 --cpus 2 --memory 8G --disk 10G

# 在worker节点虚拟机上安装k3s
 for f in 1 2; do
     multipass exec worker$f -- bash -c "curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=\"https://$MASTER_IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"
 done

这样就完成了一个多节点的kubernetes集群的搭建。

在线实验环境

Killercoda

Play-With-K8s

kubectl常用命令

基础使用

shell
# 查看帮助
kubectl --help

# 查看API版本
kubectl api-versions

# 查看集群信息
kubectl cluster-info

资源的创建和运行

shell
# 创建并运行一个指定的镜像
kubectl run NAME --image=image [params...]
# e.g. 创建并运行一个名字为nginx的Pod
kubectl run nginx --image=nginx

# 根据YAML配置文件或者标准输入创建资源
kubectl create RESOURCE
# e.g.
# 根据nginx.yaml配置文件创建资源
kubectl create -f nginx.yaml
# 根据URL创建资源
kubectl create -f https://k8s.io/examples/application/deployment.yaml
# 根据目录下的所有配置文件创建资源
kubectl create -f ./dir

# 通过文件名或标准输入配置资源
kubectl apply -f (-k DIRECTORY | -f FILENAME | stdin)
# e.g.
# 根据nginx.yaml配置文件创建资源
kubectl apply -f nginx.yaml

查看资源信息

shell
# 查看集群中某一类型的资源
kubectl get RESOURCE
# 其中,RESOURCE可以是以下类型:
kubectl get pods / po         # 查看Pod
kubectl get svc               # 查看Service
kubectl get deploy            # 查看Deployment
kubectl get rs                # 查看ReplicaSet
kubectl get cm                # 查看ConfigMap
kubectl get secret            # 查看Secret
kubectl get ing               # 查看Ingress
kubectl get pv                # 查看PersistentVolume
kubectl get pvc               # 查看PersistentVolumeClaim
kubectl get ns                # 查看Namespace
kubectl get node              # 查看Node
kubectl get all               # 查看所有资源

# 后面还可以加上 -o wide 参数来查看更多信息
kubectl get pods -o wide

# 查看某一类型资源的详细信息
kubectl describe RESOURCE NAME
# e.g. 查看名字为nginx的Pod的详细信息
kubectl describe pod nginx

资源的修改、删除和清理

shell
# 更新某个资源的标签
kubectl label RESOURCE NAME KEY_1=VALUE_1 ... KEY_N=VALUE_N
# e.g. 更新名字为nginx的Pod的标签
kubectl label pod nginx app=nginx

# 删除某个资源
kubectl delete RESOURCE NAME
# e.g. 删除名字为nginx的Pod
kubectl delete pod nginx

# 删除某个资源的所有实例
kubectl delete RESOURCE --all
# e.g. 删除所有Pod
kubectl delete pod --all

# 根据YAML配置文件删除资源
kubectl delete -f FILENAME
# e.g. 根据nginx.yaml配置文件删除资源
kubectl delete -f nginx.yaml

# 设置某个资源的副本数
kubectl scale --replicas=COUNT RESOURCE NAME
# e.g. 设置名字为nginx的Deployment的副本数为3
kubectl scale --replicas=3 deployment/nginx

# 根据配置文件或者标准输入替换某个资源
kubectl replace -f FILENAME
# e.g. 根据nginx.yaml配置文件替换名字为nginx的Deployment
kubectl replace -f nginx.yaml

调试和交互

shell
# 进入某个Pod的容器中
kubectl exec [-it] POD [-c CONTAINER] -- COMMAND [args...]
# e.g. 进入名字为nginx的Pod的容器中,并执行/bin/bash命令
kubectl exec -it nginx -- /bin/bash

# 查看某个Pod的日志
kubectl logs [-f] [-p] [-c CONTAINER] POD [-n NAMESPACE]
# e.g. 查看名字为nginx的Pod的日志
kubectl logs nginx

# 将某个Pod的端口转发到本地
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]
# e.g. 将名字为nginx的Pod的80端口转发到本地的8080端口
kubectl port-forward nginx 8080:80

# 连接到现有的某个Pod(将某个Pod的标准输入输出转发到本地)
kubectl attach POD -c CONTAINER
# e.g. 将名字为nginx的Pod的标准输入输出转发到本地
kubectl attach nginx

# 运行某个Pod的命令
kubectl run NAME --image=image -- COMMAND [args...]
# e.g. 运行名字为nginx的Pod
kubectl run nginx --image=nginx -- /bin/bash

Portainer的安装和使用

Portainer 是一个轻量级的容器管理工具,可以用来管理Docker和Kubernetes,它提供了一个Web界面来方便我们管理容器。

官方网址: https://www.portainer.io/

安装Portainer

shell
# 创建一个名字叫做portainer的虚拟机
multipass launch --name portainer --cpus 2 --memory 8G --disk 10G

当然也可以直接安装在我们刚刚创建的master节点上,

shell
# 在master节点上安装portainer,并将其暴露在NodePort 30777上
kubectl apply -n portainer -f https://downloads.portainer.io/ce2-19/portainer.yaml

或者使用Helm安装

shell
# 使用Helm安装Portainer
helm upgrade --install --create-namespace -n portainer portainer portainer/portainer --set tls.force=true

然后直接访问 https://localhost:30779/ 或者 http://localhost:30777/ 就可以了,

Helm的安装和使用

Helm 是一个Kubernetes的包管理工具,可以用来管理Kubernetes的应用,它提供了一个命令行工具来方便我们管理Kubernetes的应用。

官方网址: https://helm.sh/

安装Helm

使用包管理器安装:

shell
# macOS
brew install helm

# Windows
choco install kubernetes-helm
# 或者
scoop install helm

# Linux(Debian/Ubuntu)
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

# Linux(CentOS/Fedora)
sudo dnf install helm

# Linux(Snap)
sudo snap install helm --classic

# Linux(FreeBSD)
pkg install helm

使用脚本安装

shell
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

或者

shell
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash