系统相关
首页 > 系统相关> > 基于Windows 10的 WSL2 配置和搭建Kubernetes的高效开发环境

基于Windows 10的 WSL2 配置和搭建Kubernetes的高效开发环境

作者:互联网

## 基于Windows 10的 WSL2 配置和搭建Kubernetes的高效开发环境 ### 一、准备环境 > 1.1 硬件环境 这是我的工作开发机器配置: CPU: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz(建议i5 以上) RAM: 64.0 GB(建议16GB及以上) 磁盘: 250GB 固态磁盘(建议) > 1.2 Windows 10版本要求 和 启用WSL 我的版本号:  19043.1081 在运行中输入 winver 即可查看到 Windows 10 版本号。 (1)按下 Windows + R (2)在运行中执行 winver 命令 控制面板-> 所有控制面板项 -> 程序和功能 -> 启用或关闭Windows 功能 -> 适用于Linux的Windows子系统 > 1.3  一套远程Kubernetes 环境  这里我是用了一台闲置NUC8部署了CentOS7 上面部署一套单点Kubernetes集群 ),和我的工作开发机在一个交换机上,如果没有资源条件,也可以开一台虚拟机部署单点Kubernetes集群,然后去掉master节点不允许调度的污点 ```bash #允许master节点调度 $ kubectl taint nodes master-noede  node-role.kubernetes.io/master- #恢复不允许 master节点调度 $ kubectl taint node master-noede node-role.kubernetes.io/master="":NoSchedule ``` > 1.4 wsl_update_x64.msi 双击安装补丁更新 > 1.5 Ubuntu_2004.2020.424.0_x64.appx 开启一个CMD或者Powershell窗口,运行如下命令 ```Powershell Add-AppxPackage .\Ubuntu_2004.2020.424.0_x64.appx ``` > 1.6 Docker Desktop Installer.exe 选装,建议安装,如果本地要构建镜像,需要用到Docker 安装完成之后,需要配置基于WSL2启用Dockers Settings -> Resources -> WSL INTEGRATION -> Enable Ubuntu-20.04 -> Apply & Restart > 1.7 Visual Studio Code 双击安装 > 1.8 在WSL2 Ubuntu 20.04 上部署和配置Golang ```bash #环境变量配置 GOROOT=/home/lvzhiqiang/go             GOPATH=/home/lvzhiqiang/gopath         PATH=$PATH:$GOROOT/bin:$GOPATH/bin     export PATH GOROOT GOPATH              ``` > 1.9 在WSL2 Ubuntu 20.04 上安装Telepresence https://www.telepresence.io/docs/v1/reference/install/ ```bash curl -s https://packagecloud.io/install/repositories/datawireio/telepresence/script.deb.sh | sudo bash sudo apt install --no-install-recommends telepresence ``` > 1.10 在WSL2 Ubuntu 20.04 上安装kubectl和配置kubeconfig + 将远程集群的kubectl 工具放到本地/usr/bin/目录下 + 将远程集群kubernetes 的kubeconfig 放到本地.kube/config文件中 ### 二、实战配置 #### 本地运行一个获取 default deployment的程序 > 2.1 远程集群运行一个临时deployment  ```bash $ kubectl create deployment get-deployments --image=busybox:1.28 ``` > 2.2  启动本地节点接入kubernetes集群环境,即本地节点充当远程集群的一个POD环境,能够像在集群本地一样访问集群的所有资源,例: svc等 #注意: svc 跨命名空间访问需要限定命名空间,比如: kubernetes.default, test-svc.testns ```bash #启动代理接入,会进到一个新Shell下,后续命令将在这个新Shell操作,如果需要特定的shell,可以指定一个 --run /bin/zsh,如果应用需要给集群中其它POD访问,需指定暴露端口:  --expose , 比如: 集群svc 的端口是 80,ep的端口是8080,那么svc指向我这个本地端口是这样的, svc(80) -> pod(8080) -> local(8080), 参数需要设定成这样: --expose 8080:8080 $ telepresence  --swap-deployment get-deployments --namespace default #模拟POD环境 $ mkdir /var/run/secrets/kubernetes.io/ $ chmod 777 /var/run/secrets/kubernetes.io/ $ ln -s $TELEPRESENCE_ROOT/var/run/secrets/kubernetes.io/serviceaccount  /var/run/secrets/kubernetes.io/ ``` 注意: 从telepresence shell环境退出之后,需要清理相关文件,否则下次重新进行会链接到旧的失效文件 ```bash #telepresence shell @kube-dev|lvzhiqiang:lvzhiqiang $ exit exit T: Your process has exited. T: Exit cleanup in progress T: Cleaning up Pod ╭─lvzhiqiang@Going ~ ╰─$ sudo rm -f /var/run/secrets/kubernetes.io/serviceaccount ``` > 2.3 VSCode配置 ```JSON {     // Use IntelliSense to learn about possible attributes.     // Hover to view descriptions of existing attributes.     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387     "version": "0.2.0",     "configurations": [         {             "name": "running get-deployments",             "type": "go",             "request": "launch",             "mode": "auto",             "env": {                 "KUBERNETES_SERVICE_HOST": "kubernetes.default",                 "KUBERNETES_SERVICE_PORT": "443"             },             "buildFlags": "-mod=vendor",             "program": "${fileDirname}"         }     ] } ``` > 2.4 代码 ```golang package main import (     "context"     "fmt"     metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"     "k8s.io/client-go/kubernetes"     "k8s.io/client-go/rest" ) func main() {     //基于ServiceAccount获取集群配置     config, err := rest.InClusterConfig()     if err != nil {         panic(err.Error())     }     //创建一个clientset客户端     clientset, err := kubernetes.NewForConfig(config)     if err != nil {         panic(err.Error())     }     deployments, err := clientset.AppsV1().Deployments("default").List(context.TODO(), metav1.ListOptions{})     if err != nil {         panic(err.Error())     }     for idx, deploy := range deployments.Items {         fmt.Printf("%d -> %s\n", idx+1, deploy.Name)     } } ``` > 2.5 配置ServiceAccount绑定角色,给get-deployments下的default serviceaccount绑定一个读去default命名空间的资源对象的角色 如果不配置,运行程序就会报如下错误信息: ```bash deployments.apps is forbidden: User "system:serviceaccount:default:default" cannot list resource "deployments" in API group "apps" in the namespace "default" ``` 配置ServiceAccount绑定, default-ns-role.yaml 内容如下: ```YAML apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:   name: default-ns-role   namespace: default rules: - apiGroups: [""]   resources: ["pods"]   verbs: ["get", "watch", "list"] - apiGroups: ["apps"]   resources: ["deployments"]   verbs: ["get", "list"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata:   name: default-ns-role-binding   namespace: default subjects: - kind: ServiceAccount   name: default   namespace: default roleRef:   kind: Role   name: default-ns-role   apiGroup: rbac.authorization.k8s.io ``` ```bash $ kubectl apply -f default-ns-role.yaml ``` > 2.6 运行程序效果如下 ```bash 1 -> busybox-client 2 -> get-deployments ``` 至此我们就完成了如何搭建一个基于Kubernetes的高效开发环境,不用每次写完代码还要打包发布到集群调试,直接在本地模拟一个真实的Kubernetes运行环境,大大节省了我们的调试时间。 附件: 2.代码示例和工具链接地址  链接:https://pan.baidu.com/s/1SqJPRqnAyOFOGBQDcZ3Xlg  提取码:7vb2 

标签:10,Kubernetes,kubernetes,Windows,deployments,default,集群,io,bash
来源: https://blog.51cto.com/u_4073279/3006944