上一篇我们讲了k8s中的扩展点。在开始Operator的开发之前,我们需要先搭建本地环境。在开始依赖检查之前,我们需要先进行检查。1.是否安装了Docker环境如果没有安装Mac/Windows的用户可以直接安装DockerDesktop。Windows用户推荐使用WSL22。是否安装了Golang环境,Go版本最好>=1.15。如果没有,可以参考官方文档进行安装。2、使用Kind搭建本地开发环境2.1安装如果本地有Golang环境,可以直接执行如下命令安装GO111MODULE="on"gogetsigs.k8s.io/kind@v0.10.0&&kindcreatecluster如果没有如果不想通过源码安装,可以查看官方文档,直接安装编译好的二进制文件。执行以下命令可以输出kind的版本,说明安装了?kindversionkindv0.10.0go1.16linux/amd642.2创建K8s集群使用以下命令创建一个简单的单节点K8s集群nodecreateclutser的创建时间集群和你的网络环境和机器Kind会去dockerhub拉取kindest/node镜像。此图像大小约为400M。当出现如下提示时,表示集群已经创建。?kindcreateclusterCreatingcluster"kind"...?Ensuringnodeimage(kindest/node:v1.20.2)🖼?准备节点📦?写配置📜?启动控制平面🕹xtto"kind-kind"您现在可以使用您的集群:kubectlcluster-info--contextkind-kind感谢您使用kind!😊我们可以使用kindgetclusters来获取我们创建的集群列表,kind支持创建多个集群,默认名称是不手动指定的对于kind,我们也可以在创建集群时使用--name指定集群名称如下.kindcreatecluster--namemohuishou可以看到我们两个集群都创建好了deleteclustersmohuishou删除刚刚创建的集群2.3使用集群先看看kubectl的常用命令能不能正常使用,部署一个简单的web服务试试看集群信息?kubectlcluster-info--contextkind-kindKubernetesmasterisrunningathttps://127.0.0.1:41801KubeDNisisrunningathttps://127.0.0.1:41801/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTofurtherdebuganddiagnoseclusterklusterkclects,使用'-信息转储'。可以看到我们的k8smaster地址和dns地址,注意一般我们只创建一个集群,不指定--context集群名,但这基本是创建多个集群时必备的命令如果不加这个参数,可能会报如下错误Theconnectiontotheserverlocalhost:8080wasrefused-didyouspecifytherighthostorport?这是因为kubectl默认连接的apiserver地址是localhost:8080,而我们的apiserver地址不是这个,所以报错。为什么我们使用--contextcluster-name?这是因为kind在创建集群的时候会修改$HOME/.kube/config的配置,自动写入集群的apiserver地址,证书等相关信息,每个命令都要加上这个参数,太麻烦了。我们可以使用kubectlconfiguse-contextcontext-name来设置它。设置好之后,我们就不用每次都加上-context参数了。同时你也可以通过kubectlconfigcurrent-context来查询我们当前默认运行的是哪个集群。查看集群节点列表发现我们部署的是单节点v1.20.2集群?kubectlgetnoNAMESTATUSROLESAGEVERSIONkind-control-planeReadycontrol-plane,master20mv1.20.2部署一个Nginx服务使用如下代码创建一个nginx.yml文件,然后使用kubectlapply-fnginx.yml完成部署apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentlabels:app:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.14.2ports:-containerPort:80Viewthestatusofthecurrentdeployment?kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deployment0/33039sViewthestatusofthepod?kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-deployment-66b6c48dd5-2s5cb1/1Running084snginx-deployment-66b6c48dd5-8wf8b1/1Running084snginx-deployment-66b6c48dd5-zc6vd1/1Running084s由于我们没有暴露服务,所以不能直接访问对应的服务。我们可以利用kubectl提供的端口转发功能将流量从本地转发到k8s集群?kubectlport-forwardnginx-deployment-66b6c48dd5-2s5cb30080:80Forwardingfrom127.0.0.1:30080->80Forwardingfrom[::1]:30080->80Handlingconnectionfor30080当我们访问http://localhost:30080时,会发现这个熟悉的nginx界面image-20210424210804343发现我们的集群已经准备好使用2.4高级使用2.4.1创建多节点集群样。默认情况下,会创建一个单节点集群。我们可以通过修改配置来创建一个高可用的集群。我们创建一个3masters节点,一个由两个worker节点组成的集群kindcreatecluster--namemohuishou-ha--configkind-ha.ymlkind:ClusterapiVersion:kind.x-k8s.io/v1alpha4nodes:-role:control-plane-role:control-plane-role:control-plane-role:worker-role:worker可以通过查看节点mohuishou-ha-control-plane3Readycontrol-plane,master13mv1.20.2mohuishou-ha-workerReady
