云原生|一个在线的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的过程,一共三部曲,其中必做的是头两步:
- 初始化K8s的Master节点;
- 初始化K8s的网络;
初始化K8s的Master节点命令如下:
#### 左右滑动,不需要任何修改
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
Master节点启动过程如下:

需要注意的在上图中已经标注,此时Node的状态是NotReady,而且coreDNS的POD也是pending的状态,原因是没有网络插件,所以需要运行第二步:初始化K8s的网络,命令如下:
#### 左右滑动,不需要任何修改
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下边的例子:
#### 左右滑动
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:
###左右滑动
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的基础功能是否好用:
####左右滑动
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 介绍
- Play with Kubernetes 一个提供了在浏览器中使用免费 CentOS Linux 虚拟机的体验平台,其内部实际上是 Docker-in-Docker(DinD)技术模拟了多虚拟机/PC 的效果。
- Play with Kubernetes 平台有如下几个特色:
- 允许我们使用 github 或 dockerhub 账号登录
- 在登录后会开始倒计时,让我们有 4 小时的时间去实践
- K8s 环境使用 kubeadm 来部署(使用用 weave 网络)
- 平台共提供 5 台 centos7 设备供我们使用(docker 版本为 24.0.2)
搭建 Kubernetes 集群
- 首先访问网站:https://labs.play-with-k8s.com/,并使用github 或 dockerhub 账号进行登录。
- 登录后点击页面上的 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
- 点击“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
- 部署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需要遵循一系列步骤。由于网络问题或其他环境限制,可能需要离线安装一些组件。以下是具体的步骤:
- 下载Calico离线包:首先,你需要从GitHub上全局搜索Calico,点击进入项目,然后在Releases下下载自己需要的Calico版本的离线包。这里我们以Calico 3.26.1版本为例。
你可以通过运行以下命令来下载Calico的离线包:wget https://github.com/projectcalico/calico/releases/download/v3.26.1/calico-kube-controllers-v3.26.1.tar.gzwget https://github.com/projectcalico/calico/releases/download/v3.26.1/calico-node-v3.26.1.tar.gzwget https://github.com/projectcalico/calico/releases/download/v3.26.1/calico-typha-v3.26.1.tar.gz
- 解压Calico离线包并将所需文件上传至服务器:下载完成后,你需要解压这些压缩包,并将解压出来的文件通过scp或其他方式上传至你的Kubernetes服务器上。
你可以使用以下命令来解压刚刚下载的压缩包:tar -xzf calico-kube-controllers-v3.26.1.tar.gz -C /tmptar -xzf calico-node-v3.26.1.tar.gz -C /tmptar -xzf calico-typha-v3.26.1.tar.gz -C /tmp
/tmp目录下。然后,你可以将解压出来的文件通过scp或其他方式上传至你的Kubernetes服务器上。 - 离线镜像导入containerd的K8s命名空间中:由于我们是在离线环境下,无法直接拉取镜像,所以我们需要将之前下载的镜像导入到containerd的命名空间中。
首先,你需要找到之前下载的镜像文件,然后使用以下命令将它们导入到containerd的命名空间中:ctr images import <镜像文件路径> --namespace k8s.<命名空间> --tag <镜像标签>
<镜像文件路径>是你之前下载的镜像文件的路径,<命名空间>是你想要导入的命名空间,<镜像标签>是你想要设置的镜像标签。你需要根据你的实际情况来填写这些参数。 - 安装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性能分析-阿里云开发者社区

浙公网安备 33010602011771号