启动并运行 K0s 和 PortainerPortainer 安装:
先决条件:
1.物理服务器
- Ubuntu Linux x 4
3.网络
简介:
在本教程中,我将解释如何开始使用 K0s 和 Portainer。 K0s 是一个用于安装 Kubernetes 的出色编排器,它使得 Kubernetes 可以以相同的方式多次安装。 Portainer 是一个平台,可以在大多数容器平台上运行并与之交互,并允许您管理您的应用程序和微服务。
在本教程中,我们将使用最多可免费用于 5 个节点的 Portainer BE。 BE 版在 Kubernetes 集群的 RBAC、Edge 和云配置方面具有一些出色的功能。
本介绍不包括将 Ubuntu 安装到服务器上,并假设已经完成。
安装 K0s:

您需要知道的第一件事是 K0S 是分布式安装。您使用 k0sctl 工具通过 ssh 连接到您的主机,它将为您提供一切。
首先,在您要编排的系统上安装 k0sctl 二进制文件。
在 Mac 上:
brew install k0sproject/tap/k0sctl
进入全屏模式 退出全屏模式
在 Windows 上:
choco install k0sctl
进入全屏模式 退出全屏模式
在 Linux/Bash 上:
k0sctl completion > /etc/bash_completion.d/k0sctl
进入全屏模式 退出全屏模式
在 Linux/Zsh 上:
k0sctl completion > /usr/local/share/zsh/site-functions/_k0sctl
进入全屏模式 退出全屏模式
生成和部署 SSH 密钥
在您编排的主机上,执行以下操作以创建密钥
ssh-keygen -t ed25519
进入全屏模式 退出全屏模式
只需按 Enter,直到所有提示都消失并创建密钥
要部署密钥,请执行以下操作。用户应该是您在 ubuntu 主机上创建的任何用户,并且 ip 应该是每个 ubuntu 主机的 ip:
ssh-copy-id -i ~/.ssh/id_ed25519 user@host
进入全屏模式 退出全屏模式
配置K0s:
K0s 需要一个包含集群配置的 yaml 文件。 K0s 实际上会为您创建这个 yaml 文件,以便开始使用。为此,请在新目录中运行以下命令:
k0sctl init > k0sctl.yaml
进入全屏模式 退出全屏模式
获得文件后,使用您选择的编辑器对其进行编辑。我倾向于选择vscode。下面是一个具有 1 个控制器和 3 个工作器的 4 节点集群的示例。每个主机都有一个 IP 地址、一个用户名、ssh 密钥的路径(在编排机器上)以在连接时对主机进行身份验证,以及该主机的角色。关于这一点的好处是,一旦配置好,您就可以一遍又一遍地运行它。
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s-cluster
spec:
hosts:
- ssh:
address: 192.168.10.1
user: user
port: 22
keyPath: /Users/user/.ssh/id_ed25519
role: controller
- ssh:
address: 192.168.10.2
user: user
port: 22
keyPath: /Users/user/.ssh/id_ed25519
role: worker
- ssh:
address: 192.168.10.3
user: user
port: 22
keyPath: /Users/user/.ssh/id_ed25519
role: worker
- ssh:
address: 192.168.10.4
user: user
port: 22
keyPath: /Users/user/.ssh/id_ed25519
role: worker
k0s:
version: 1.24.2+k0s.0
dynamicConfig: false
进入全屏模式 退出全屏模式
配置完所有需要的内容后,运行以下命令以启动所有内容:
Mac/Linux:
k0sctl apply --config ./k0sctl.yaml
进入全屏模式 退出全屏模式
视窗:
k0sctl apply --config k0sctl.yaml
进入全屏模式 退出全屏模式
您将从该命令获得一堆输出,如下所示:
⠀⣿⣿⡇⠀⠀⢀⣴⣾⣿⠟⠁⢸⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀█████████ █████████ ███
⠀⣿⣿⡇⣠⣶⣿⡿⠋⠀⠀⠀⢸⣿⡇⠀⠀⠀⣠⠀⠀⢀⣠⡆⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀███ ███ ███
⠀⣿⣿⣿⣿⣟⠋⠀⠀⠀⠀⠀⢸⣿⡇⠀⢰⣾⣿⠀⠀⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀███ ███ ███
⠀⣿⣿⡏⠻⣿⣷⣤⡀⠀⠀⠀⠸⠛⠁⠀⠸⠋⠁⠀⠀⣿⣿⡇⠈⠉⠉⠉⠉⠉⠉⠉⠉⢹⣿⣿⠀███ ███ ███
⠀⣿⣿⡇⠀⠀⠙⢿⣿⣦⣀⠀⠀⠀⣠⣶⣶⣶⣶⣶⣶⣿⣿⡇⢰⣶⣶⣶⣶⣶⣶⣶⣶⣾⣿⣿⠀█████████ ███ ██████████
INFO k0sctl 0.0.0 Copyright 2021, Mirantis Inc.
INFO Anonymized telemetry will be sent to Mirantis.
INFO By continuing to use k0sctl you agree to these terms:
INFO https://k0sproject.io/licenses/eula
INFO ==> Running phase: Connect to hosts
INFO [ssh] 10.0.0.1:22: connected
INFO [ssh] 10.0.0.2:22: connected
INFO ==> Running phase: Detect host operating systems
INFO [ssh] 10.0.0.1:22: is running Ubuntu 20.10
INFO [ssh] 10.0.0.2:22: is running Ubuntu 20.10
INFO ==> Running phase: Prepare hosts
INFO [ssh] 10.0.0.1:22: installing kubectl
INFO ==> Running phase: Gather host facts
INFO [ssh] 10.0.0.1:22: discovered 10.12.18.133 as private address
INFO ==> Running phase: Validate hosts
INFO ==> Running phase: Gather k0s facts
INFO ==> Running phase: Download K0s on the hosts
INFO [ssh] 10.0.0.2:22: downloading k0s 0.11.0
INFO [ssh] 10.0.0.1:22: downloading k0s 0.11.0
INFO ==> Running phase: Configure K0s
WARN [ssh] 10.0.0.1:22: generating default configuration
INFO [ssh] 10.0.0.1:22: validating configuration
INFO [ssh] 10.0.0.1:22: configuration was changed
INFO ==> Running phase: Initialize K0s Cluster
INFO [ssh] 10.0.0.1:22: installing k0s controller
INFO [ssh] 10.0.0.1:22: waiting for the k0s service to start
INFO [ssh] 10.0.0.1:22: waiting for kubernetes api to respond
INFO ==> Running phase: Install workers
INFO [ssh] 10.0.0.1:22: generating token
INFO [ssh] 10.0.0.2:22: writing join token
INFO [ssh] 10.0.0.2:22: installing k0s worker
INFO [ssh] 10.0.0.2:22: starting service
INFO [ssh] 10.0.0.2:22: waiting for node to become ready
INFO ==> Running phase: Disconnect from hosts
INFO ==> Finished in 2m2s
INFO k0s cluster version 0.11.0 is now installed
INFO Tip: To access the cluster you can now fetch the admin kubeconfig using:
INFO k0sctl kubeconfig
进入全屏模式 退出全屏模式
最终输出让您知道运行 k0sctl kubeconfig 命令,该命令将生成运行 kubectl (Kubernetes) 命令所需的 kubeconfig 文件。
要运行 kubeconfig 文件:
k0sctl kubeconfig > kubeconfig
进入全屏模式 退出全屏模式
要测试集群运行:
kubectl get pods --kubeconfig kubeconfig -A
进入全屏模式 退出全屏模式
你应该看到:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-5f6546844f-w8x27 1/1 Running 0 3m50s
kube-system calico-node-vd7lx 1/1 Running 0 3m44s
kube-system coredns-5c98d7d4d8-tmrwv 1/1 Running 0 4m10s
kube-system konnectivity-agent-d9xv2 1/1 Running 0 3m31s
kube-system kube-proxy-xp9r9 1/1 Running 0 4m4s
kube-system metrics-server-6fbcd86f7b-5frtn 1/1 Running 0 3m51s
进入全屏模式 退出全屏模式
K0s 问题:
在某些 K0 版本中存在一个问题,即某些目录不在 Kubernetes 的预期位置。在你把头撞到墙上之前,这里有一个修复方法。 SSH 到您的工作节点并运行以下命令:
sudo ln -s /var/lib/k0s/kubelet /var/lib/
进入全屏模式 退出全屏模式
这为您提供了基本的 linux 安装,但您仍然需要其他一些东西。首先是负载均衡器。我通常使用 MetalLB。要安装 MetalLB,请运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml
进入全屏模式 退出全屏模式
要配置 metalLB,然后使用您的网络信息编辑以下内容。当通过负载均衡器向外部公开容器时,网络应该对应于您想要分配的子网上的空闲地址。将内容放入编辑器并将其另存为“metallb.yaml”
metallb.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.10.240-192.168.10.250
进入全屏模式 退出全屏模式
要应用配置运行:
kubectl apply -f ./metallb.yaml
进入全屏模式 退出全屏模式
我想添加的最后一件事是入口控制器。我通常为此使用 Nginx。入口控制器将 URL 模式与 kubernetes 服务相匹配,以节省使用 IP 地址进行所有操作。您可以创建一个负载均衡器,然后将 DNS 映射到该 IP。入口将查看引用的 DNS 并匹配它。如果有匹配项,它将遵循定义的规则以将 DNS 匹配项与服务连接。
要添加入口,请执行以下操作:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.3/deploy/static/provider/baremetal/deploy.yaml
进入全屏模式 退出全屏模式
您的集群中可以有多个入口类。最好定义一个默认值。为了做到这一点,运行:
kubectl -n ingress-nginx annotate ingressclasses nginx ingressclass.kubernetes.io/is-default-class="true"
进入全屏模式 退出全屏模式
最后,您需要更改 Nginx 的默认行为,该行为将公开节点端口以更改为 LoadBalancer。
kubectl edit service ingress-nginx-controller -n ingress-nginx
进入全屏模式 退出全屏模式
存储
这有点超出了安装的范围,但我会在这里添加它,因为它可能对某些人有用。
Kubernetes 中需要一个存储类来实现数据持久化。有很多方法可以做到这一点。有些人喜欢通过使用 longhorn.io 或 Ceph 之类的东西来使用 Kubernetes 集群作为存储类。我在 TrueNAS 上设置了一个 NFS 存储设备,用于此目的。以下说明将使用 NFS 设置 CSI(容器存储接口):
在集群上安装 NFS:
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.1.0
进入全屏模式 退出全屏模式
应用存储类配置。唯一真正需要更改的是 NFS 服务器的 IP 地址和该服务器上的共享:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.10.10
share: /mnt/default/code/
# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
# csi.storage.k8s.io/provisioner-secret-name: "mount-options"
# csi.storage.k8s.io/provisioner-secret-namespace: "default"
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nconnect=8 # only supported on linux kernel version >= 5.3
- nfsvers=4.1
进入全屏模式 退出全屏模式
最后,我们希望将该存储类设为集群的默认值:
kubectl patch storageclass nfs-csi -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
进入全屏模式 退出全屏模式
备注:
K0s 真正好的特性之一是自动化。我还没有这样做,但您可以使用清单部署程序和 helm 部署程序自动执行上述额外步骤。信息如下:
清单部署者:
zoz100037
Helm 部署器:
https://docs.k0sproject.io/v1.24.3+k0s.0/helm-charts/
搬运工安装:
要求:
1.Kubernetes集群
2.数据持久化存储
安装:
helm repo add portainer https://portainer.github.io/k8s/
helm repo update
进入全屏模式 退出全屏模式
通过负载均衡器安装是最简单的:
helm install --create-namespace -n portainer portainer portainer/portainer \
--set service.type=LoadBalancer \
--set enterpriseEdition.enabled=true \
--set tls.force=true
进入全屏模式 退出全屏模式
如果您想更高级一点,并设置入口和 DNS 并知道入口负载均衡器 ip,请运行以下命令。意识到有许多先决条件才能使其正常工作。这是有关 Ingress 的一些信息(https://kubernetes.io/docs/concepts/services-networking/ingress/)::)
helm install --create-namespace -n portainer portainer portainer/portainer \
--set enterpriseEdition.enabled=true \
--set service.type=ClusterIP \
--set tls.force=true \
--set ingress.enabled=true \
--set ingress.ingressClassName=<ingressClassName (eg: nginx)> \
--set ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"=HTTPS \
--set ingress.hosts[0].host=<fqdn (eg: portainer.example.io)> \
--set ingress.hosts[0].paths[0].path="/"
进入全屏模式 退出全屏模式
登录:
已安装负载均衡器:
https://<loadbalancer IP>:9443/ or http://<loadbalancer IP>:9000/
进入全屏模式 退出全屏模式
入口安装:
https://<FQDN>/
进入全屏模式 退出全屏模式
创建第一个用户:

添加您的免费许可证密钥:
如果您已经安装了 Portainer Business Edition,您现在将被要求提供您的许可证密钥。在注册 Business Edition 或免费试用版时,您将获得此信息。如果您没有许可证密钥,您可以单击没有许可证?链接或与我们的团队取得联系。
将您提供的许可证密钥粘贴到框中,然后单击提交。

导入 Kubernetes 集群:

选择 Kubernetes 选项并单击启动向导。然后选择导入选项。
输入集群的名称,然后单击选择文件以浏览您的 kubeconfig 文件。

准备好后,单击“连接”按钮。如果您有其他环境要配置,请单击“下一步”继续,否则单击“关闭”返回到您将看到配置进度的环境列表。
从这里您可以按照文档进行其他所有设置:
搬运工文档
在 (https://www.portainer.io/blog) 上查看我们可以使用搬运工做的更多事情
在 (https://www.portainer.io/pricing/take5) 获取 5 个节点的免费许可证
更多推荐
所有评论(0)