云原生|一个在线的K8s免费练习平台

云原生|一个在线的K8s免费练习平台-腾讯云开发者社区-腾讯云

技术的学习唯手熟尔,必须要在理论的基础上实际操作,才能加深印象,之前分享了使用VMWare创建VM的方式安装K3s来做实验,最近发现了一个在线的k8s练习平台叫做Play with Kubernetes,是对于环境受限或者资源受限还想做K8s实验的福音。

Play with Kubernetes 介绍

Play with Kubernetes是Docker通过使用Docker-in-Docker(DinD)技术模拟了多个虚拟机的效果,从而提供了一个在浏览器中免费使用CentOS Linux虚拟机的接口和体验平台,Play with Kubernetes有如下几个优缺点:

优点
  • 免费体验:每次登录后都有4个小时的体验时间,可以做想做的实验;
  • K8s环境使用kubeadm直接部署(使用 weave 网络);
  • 平台共提供了5台Centos7设备供我们使用(docker版本为24.0.2),也就是可以创建5个虚拟node;
  • K8s也是比较新的版本1.27.2版本;
  • 直接联网,需要apply的yaml或者下载的镜像是直接从官网下载的,而且是外网。
缺点
  • 只能使用github或者docker账户做oauth验证,所以要首先拥有docker或者github账户;
  • 每次4小时的Session过期后,再登录之后又要从0开始搭建k8s;
  • 因为是浏览器中使用,所有交互不是很好,比如Windows下的复制粘贴不是正常的Ctrl+C和Ctrl+V了(后边会介绍如何复制粘贴);
  • 最多只能创建5个虚拟机,也就是只能搭建一个master+4 worker的5node的集群,当然对于体验来说也够用了。

总体来说,Play with Kubernetes是一个很好的免费体验平台,对于日常学习、理解和实践基础概念是完全够用了。

下边介绍下如何使用。

如何复制粘贴

工欲善其事必先利其器,之前说了使用过程中不能用正常的Ctrl+C和Ctrl+V来复制粘贴了,所以先介绍下如何复制粘贴。

@七禾页话

MAC电脑

登录后,如果是Mac电脑,Setting中可以看到会自动识别出来,如果没有识别出来,可以选中“Mac OSX”,复制粘贴键如下:

  • 复制:Command键+C
  • 粘贴:Command键+V
Windows电脑

如果不是Mac电脑,是Windows系统,那么登录后,Setting中识别的是None,这个时候的复制粘贴如下:

带Fn键的,需要开启Fn功能,也就是Fn键上的小灯是亮的:

  • Ctrl键+Fn键+Insert键(F10键)
  • Shift键+Fn键+Insert键(F10键)

Fn功能的开启先按fn然后迅速按左侧shift键,即可开启fn(功能)模式:

@七禾页话

如果不带Fn键的:

  • Ctrl键+Insert键
  • Shift键+Insert键

如何使用Play with Kubernetes

接下来就是正文如何使用Play with Kubernetes了。

打开网站https://labs.play-with-k8s.com/,选择使用Github或者Docker后跳转进行Oauth验证登录。

@七禾页话

创建Instance

登录后首先要Add New Instance来创建Node,可以根据自己的需要创建多个node,最多5个:

@七禾页话

@七禾页话

初始化集群的Master节点

创建完Node后,可以看到Warning提示初始化Master的过程,一共三部曲,其中必做的是头两步:

  1. 初始化K8s的Master节点;
  2. 初始化K8s的网络;

初始化K8s的Master节点命令如下:

代码语言:javascript
复制
#### 左右滑动,不需要任何修改
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16

Master节点启动过程如下:

需要注意的在上图中已经标注,此时Node的状态是NotReady,而且coreDNS的POD也是pending的状态,原因是没有网络插件,所以需要运行第二步:初始化K8s的网络,命令如下:

代码语言:javascript
复制
#### 左右滑动,不需要任何修改
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml

安装结果如下,安装网络插件后,等一会儿Node就会Ready,所有的POD也都会Ready:

注册Worker到Master

如果已经创建了其他的node,直接在master以外的node上运行如下的命令,此命令是安装K8s master节点log中的join命令,其中token每次都会变,所以不要直接copy下边的例子:

代码语言:javascript
复制
#### 左右滑动
kubeadm join 192.168.0.18:6443 --token 1g5gfn.agqd0wf4cbv2hbyf \
        --discovery-token-ca-cert-hash sha256:eac1d72af79f6b3da5e69ee44cd1e3f46c3de52f90f4ef448655daefadf5669d 

过程如下:

然后回到Master节点运行kubectl get node可以看到node2已经加入到集群了:

但是会看到worker的role是none,为了很清晰明了的知道各个node的角色,可以打label:

代码语言:javascript
复制
###左右滑动
kubectl label nodes <node name> kubernetes.io/role=worker

或者for循环
for i in `kubectl get nodes -o wide --no-headers | grep -iv "control-plane" | awk '{print $1}'`;do kubectl label nodes $i kubernetes.io/role=worker;done

效果如下:

可以继续将第二个worker节点加入到集群中,到此一个Master加两个Worker的小K8s集群创建完成了。

@七禾页话

实例化一个Nginx

Ngnix作为云原生界的hello world常常被用来验证集群是否好用,所以我们也继续用Ngnix来验证Cluster的基础功能是否好用:

代码语言:javascript
复制
####左右滑动
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml

结果如下:

查看service之后可以使用curl cluster-ip来确认nginx的业务是否好用,如果看到如下的Thank you for using nginx代表nginx业务是正常的:

以上就是使用Play with Kubernetes的过程,总体使用下来除了复制粘贴比较麻烦,偶尔会有卡顿,整体使用下来还是很好的,对于初次接触K8s或者做一些简单验证学习是很好的一个环境,当然一次性4个小时,如果想要验证的没有做完,那就要重来了,需要数秒刷副本!

以上,欢迎留言来一起了解学习ICT的相关知识!

打破限制,随时随地练习K8S!在线Kubernetes平台开启你的技术之旅!_play with kubernetes-CSDN博客

是不是有很多小伙伴想学习k8s,但是又没有机器去练习。使用自己的笔记本电脑或者主机只能搭建单机版本的k8s来练习。

现在福利来了,给大家介绍一个在线多节点k8s练习平台:Play with Kubernetes

Play with Kubernetes 介绍

  1. Play with Kubernetes 一个提供了在浏览器中使用免费 CentOS Linux 虚拟机的体验平台,其内部实际上是 Docker-in-Docker(DinD)技术模拟了多虚拟机/PC 的效果。
  2. Play with Kubernetes 平台有如下几个特色:
  • 允许我们使用 github 或 dockerhub 账号登录
  • 在登录后会开始倒计时,让我们有 4 小时的时间去实践
  • K8s 环境使用 kubeadm 来部署(使用用 weave 网络)
  • 平台共提供 5 台 centos7 设备供我们使用(docker 版本为 24.0.2)

搭建 Kubernetes 集群

  1. 首先访问网站:https://labs.play-with-k8s.com/,并使用github 或 dockerhub 账号进行登录。
  2. 登录后点击页面上的 Start 按钮,我们便拥有一个自己的实验室环境。


3. 单击左侧的“Add New Instance” 来创建第一个 Kubernetes 集群节点。它会自动将其命名为“node1”,这个将作为我们群集的主节点


可以看到有三条命令,分别是:初始化master节点、初始化网络、部署nginx pod。
4. node1 执行第一条命令

kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16

执行完毕后,可以看到输出中存在这么一条命令:


这条命令用于后续添加node节点,在node节点中执行。先复制出来,后续使用
5. node1 执行第二条命令
此命令是安装 Pod 网络(这里我们使用 flannel),否则 Pod 之间无法通信。

kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
  1. 点击“Add New Instance” 创建node2,并执行第四步复制出来,执行添加节点的的命令
kubeadm join 192.168.0.13:6443 --token ezgizu.pi14arjxq8pyzstm \
        --discovery-token-ca-cert-hash sha256:83feca790dfbd89d515f28deb4fce1401078cccc95981fdd63895c340697d90e

执行完毕后,切换到node1,执行kubectl get nodes查看已经部署好的节点:

[node1 ~]$ kubectl get nodes
NAME    STATUS   ROLES           AGE     VERSION
node1   Ready    control-plane   4m19s   v1.27.2
node2   Ready    <none>          23s     v1.27.2
  1. 部署nginx,node1执行第三条命令。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml

检查pod 是否运行,执行kubectl get pods -o wide

[node1 ~]$ kubectl get pods -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP         NODE    NOMINATED NODE   READINESS GATES
my-nginx-cbdccf466-c2744   1/1     Running   0          30s   10.5.1.2   node2   <none>           <none>
my-nginx-cbdccf466-sqc2z   1/1     Running   0          30s   10.5.1.3   node2   <none>           <none>
my-nginx-cbdccf466-wl8kq   1/1     Running   0          30s   10.5.1.4   node2   <none>           <none>

检查service,执行kubectl get service:

[node1 ~]$ kubectl get service
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP      10.96.0.1      <none>        443/TCP        7m3s
my-nginx-svc   LoadBalancer   10.97.165.15   <pending>     80:31661/TCP   78s

此时,可以看到集群内部ip为10.97.165.15,在任意节点中执行 curl 10.97.165.15

可看到有以下输出:

[node2 ~]$ curl 10.97.165.15
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

至此,一个master,一个node节点的k8s就已经搭建好了,并且部署了一个nginx deployment。

后续想要自己部署其他服务,也可以在这上面进行练习。每次都会有四个小时的连接时间。

 

Kubernetes 1.27.3 离线安装 Calico 3.26.1-百度开发者中心

在Kubernetes 1.27.3环境下离线安装Calico 3.26.1需要遵循一系列步骤。由于网络问题或其他环境限制,可能需要离线安装一些组件。以下是具体的步骤:

  1. 下载Calico离线包:首先,你需要从GitHub上全局搜索Calico,点击进入项目,然后在Releases下下载自己需要的Calico版本的离线包。这里我们以Calico 3.26.1版本为例。
    你可以通过运行以下命令来下载Calico的离线包:
    1. wget https://github.com/projectcalico/calico/releases/download/v3.26.1/calico-kube-controllers-v3.26.1.tar.gz
    2. wget https://github.com/projectcalico/calico/releases/download/v3.26.1/calico-node-v3.26.1.tar.gz
    3. wget https://github.com/projectcalico/calico/releases/download/v3.26.1/calico-typha-v3.26.1.tar.gz
    这些命令将从GitHub上下载Calico的各个组件的离线包。
  2. 解压Calico离线包并将所需文件上传至服务器:下载完成后,你需要解压这些压缩包,并将解压出来的文件通过scp或其他方式上传至你的Kubernetes服务器上。
    你可以使用以下命令来解压刚刚下载的压缩包:
    1. tar -xzf calico-kube-controllers-v3.26.1.tar.gz -C /tmp
    2. tar -xzf calico-node-v3.26.1.tar.gz -C /tmp
    3. tar -xzf calico-typha-v3.26.1.tar.gz -C /tmp
    这些命令会将文件解压到/tmp目录下。然后,你可以将解压出来的文件通过scp或其他方式上传至你的Kubernetes服务器上。
  3. 离线镜像导入containerd的K8s命名空间中:由于我们是在离线环境下,无法直接拉取镜像,所以我们需要将之前下载的镜像导入到containerd的命名空间中。
    首先,你需要找到之前下载的镜像文件,然后使用以下命令将它们导入到containerd的命名空间中:
    1. ctr images import <镜像文件路径> --namespace k8s.<命名空间> --tag <镜像标签>
    这里的<镜像文件路径>是你之前下载的镜像文件的路径,<命名空间>是你想要导入的命名空间,<镜像标签>是你想要设置的镜像标签。你需要根据你的实际情况来填写这些参数。
  4. 安装Calico:最后一步是安装Calico。首先,你需要创建一个新的yaml文件来定义Calico的安装配置。在这个文件中,你需要指定Calico的版本、节点标签等配置信息。然后,你可以使用kubectl命令来应用这个yaml文件,从而安装Calico。
    以下是一个示例的yaml文件内容:
    ```yaml
    apiVersion: projectcalico.org/v3
    kind: CalicoClusterInfo
    metadata:
    name: calico-cluster-info
    spec:
    datastoreReady: true
    etcdEndpoints: http://
    orchestrator: k8s
    version: v3.26.1

apiVersion: v1
kind: ServiceAccount
metadata:
name: calico-node-sa

namespace: kube-system

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: calico-cluster-admin-binding-k8s1-27-3—offline
namespace: kube-system
subjects:

  • kind: ServiceAccount
    name: calico-node-sa
    namespace: kube-system
    roleRef:
    kind: ClusterRole
    name: cluster

kubernetes calico的两种网络模式BGP和IP-IP性能分析-阿里云开发者社区

 

posted @ 2025-01-23 17:03  CharyGao  阅读(504)  评论(0)    收藏  举报