有部分同学是使用的 Windows 系统,我们的直播课程也是在 Windows 系统下面进行的,然后通过 SSH 方式连接到 服务器上面操作 Kubernetes,由于对 vim 不是很熟悉,所以又通过 sftp 的方式在本地编写资源清单文件同步到服务器上面执行的,这个过程比较繁琐,效率不高。下面就来介绍下在 Windows 系统下面配置 kubectl 的实践方式,当然如果你是 Mac 或者 Linux,思路基本都是一致的。

kubectl 配置

首先,下载 Windows 版本的 kubectl 二进制文件,地址:https://dl.k8s.io/v1.16.2/kubernetes-client-windows-amd64.tar.gz。

由于上面下载链接需要kexue上网,所以我这里离线放到到了百度网盘上,可以直接下载:
链接:https://pan.baidu.com/s/1w_2s3mzf1OWSlvgVZFssCA
提取码:fxbc

将 kubectl 二进制文件下载到本地,解压到目录:D:\apps\kubernetes 下面,然后设置该目录到 PATH 路径下面,操作步骤如下所示:

这样设置完成后就可以在终端中直接直接 kubectl 命令了。现在只需要配置 kubeconfig 文件就可以访问我们的 Kubernetes 集群了。

首先创建 .kube 目录:

$ mkdir ~/.kube  # 对应目录: C:\Users\Admin\.kube

然后将服务器上面的 kubeconfig(~/.kube/config)文件复制到 Windows 下面的 ~/.kube 目录下面,但是需要注意的是服务器上面的kubeconfig配置文件里面的 apiserver 地址是内网地址,所以我们把这里的地址改成外网IP,保存,然后测试 kubectl 命令:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"windows/amd64"}
Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 10.151.30.11, not 123.59.188.11

我们可以看到会提示证书错误,大概意思就是服务端的证书没有包含我们的外网 IP,所以我们通过外网 IP 去访问就证书校验失败了,这个时候怎么办呢?要解决这个问题主要有两个方法:

第一个就是在我们最开始初始化集群的时候通过 kubeadm 的配置文件指定参数 apiServerCertSANs 的时候,将外网IP也包含着里面,但是我们集群已经安装好了,这个方法肯定不适用了。

第二个方法我们去服务器上面看看我们的 apiserver 证书的详细信息:

$ openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 9203698167925060590 (0x7fba1ab86f1633ee)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=kubernetes
......
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:ydzs-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:10.151.30.11
Signature Algorithm: sha256WithRSAEncryption
01:1a:63:1a:f8:4e:f4:cd:7c:79:4b:64:2d:4e:a3:5a:13:80:
13:60:ca:46:ee:2d:3e:61:51:15:45:19:23:2a:09:d9:46:b3:
......

我们仔细看上面 DNS 区域就是包含的校验的域名,后面还有 IP,是不是其中就有我们的 master 节点的 hostname(ydzs-master),到这里大家想到方法了吗?

我们是不是可以直接在本地的 /etc/hosts 里面做一个 APIServer 的外网 IP -> ydzs-master 的映射,然后在本地的 kubeconfig 文件中把 apiserver 地址替换成 https://ydzs-master:6443 是不是就 OK了啊。

所以接下来直接在本地修改 hosts 映射即可,要注意用管理员身份打开文件C:\Windows\System32\drivers\etc\hosts,然后在文件里面添加一行映射:

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
123.59.188.11 ydzs-master

然后保存即可。这个时候我们再到 powershell 中去执行下 kubectl 命令呢:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

是不是全都 OK 了呀~

IDE 配置

当然 kubectl 工具配置好以后,我们就可以直接操作集群了,随便用什么工具编写 YAML 清单文件操作都可以,当然为了更好的实践方式,可以选择一些比较顺手的工具,比如 vscode 之类的编辑器,我这里使用的是 Goland 这个 IDE。对于 Idea 的 IDE 都可以一样的操作。

  • 为了页面美观,可以安装一个 Material Theme UI 的主题插件
  • 为了编写 YAML 文件方便,还需要安装一个名为 kubernetes 的插件,这样我们在编写资源清单的时候就可以自动提示了
  • 更改默认的 IDE 的 terminal 为 Powershell:open File=>Setting=>Tools=>Terminal, 将cmd.exe修改为powershell.exe保存,重启 IDE 即可。

最终的配置效果如下图所示:

Kubernetes实践技巧:Windows 系统最佳实践的更多相关文章

  1. Windows DHCP最佳实践(四)

    这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(四)中,我将分享以下DHCP最佳实践和技巧. 使用DHCP中继代理 防止恶意D ...

  2. 渗透技巧——Windows系统的帐户隐藏

    渗透技巧——Windows系统的帐户隐藏 2017-11-28-00:08:55  0x01 帐户隐藏的方法 该方法在网上已有相关资料,本节只做简单复现 测试系统:·Win7 x86/WinXP 1. ...

  3. Kubernetes日志的6个最佳实践

    本文转自Rancher Labs Kubernetes可以帮助管理部署在Pod中的上百个容器的生命周期.它是高度分布式的并且各个部分是动态的.一个已经实现的Kubernetes环境通常涉及带有集群和节 ...

  4. 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践

    写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 ​ 可能很多新手都会遇到同样的问题:我要我的Asp.net ...

  5. angularJs 技巧总结及最佳实践

    强烈建议通读官方wiki文档,里面包含了FAQ,最佳实践,深入理解最核心的Directive及Scope等文章, 基础 1. 使用ng-repeat指令,为防止重复值发生的错误.加上track by ...

  6. 使用Unity3D的50个技巧:Unity3D最佳实践

    翻译故事 原文:http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/ 这篇技巧,我自己也在翻译, ...

  7. 基于kubernetes集群的Vitess最佳实践

    概要 本文主要说明基于kubernetes集群部署并使用Vitess; 本文假定用户已经具备了kubernetes集群使用环境,如果不具备请先参阅基于minikube的kubernetes集群搭建, ...

  8. kubernetes发布解释型语言应用的最佳实践

    说明 k8s在发布编译型语言的应用时,几乎不用多考虑,就会选择将编译好jar/war包(java语言)或者二进制文件(golang/c++)直接打到镜像当中,生成新的应用镜像,然后将镜像推到镜像仓库, ...

  9. 【转】45个实用的JavaScript技巧、窍门和最佳实践

    原文:https://colobu.com/2014/09/23/45-Useful-JavaScript-Tips,-Tricks-and-Best-Practices/ 目录 [−] 列表 第一次 ...

随机推荐

  1. Object类和toString方法 --和Object类的equals方法

    一,Object类概述:Object是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或者间接的继承自该类构造方法:pulic Object()在面向对象中,子类要访问父类的无参构造方 ...

  2. 应用启动加速-并发初始化spring bean

    背景 随着需求的不断迭代,服务承载的内容越来越多,依赖越来越多,导致服务启动慢,从最开始的2min以内增长到5min,导致服务发布很慢,严重影响开发效率,以及线上问题的修复速度.所以需要进行启动加速. ...

  3. .Net CLR R2R编译的原理简析

    前言 躺平了好一段时间了,都懒得动了.本文均为个人理解所述,如有疏漏,请指正. 楔子 金庸武侠天龙八部里面,少林寺至高无上的镇寺之宝,武林人士梦寐以求的内功秘笈易筋经被阿朱偷了,但是少林寺也没有大张旗 ...

  4. ASP.NET Core 6.0 基于模型验证的数据验证

    1 前言 在程序中,需要进行数据验证的场景经常存在,且数据验证是有必要的.前端进行数据验证,主要是为了减少服务器请求压力,和提高用户体验:后端进行数据验证,主要是为了保证数据的正确性,保证系统的健壮性 ...

  5. mysql开发实战8问

    mysql读写性能是多少,有哪些性能相关的配置参数? Mysql负载高时,如何找到是由哪些SQL引起的? 如何针对具体的SQL做优化? SQL层面已难以优化,请求量继续增大时的应对策略? Mysql如 ...

  6. Odoo14 ir.rule 中的domain查询语句

    # ir.rule 中的domain查询语句 # 当你的字段是many2one.many2many.one2many的时候domain都会强制加上过滤域 # tree显示的时候也会过滤 # m.mod ...

  7. SmartIDE v1.0.23 一个非常不敏捷的发布

    SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已经发布,在超过4000 个 Builds 之后,我们终于发布了v1. ...

  8. 【面试题】为什么有时用Vue.use()?及Vue.use()的作用及原理是什么?

    Vue.use()的作用及原理 点击打开视频讲解 在Vue中引入使用第三方库通常我们都会采用import的形式引入进来 但是有的组件在引入之后又做了Vue.use()操作 有的组件引入进来又进行了Vu ...

  9. k8s vs k3s: 差异解析

    Kubernetes无疑是容器编排领域的领头羊.但目前,我们看到K3s或轻量级的Kubernetes发行版,轻巧.高效.快速,占用空间极小.鉴于目前企业对于在生产环境中使用K3s还是K8s感到纠结.我 ...

  10. Word 分页符怎么使用

    当一页内容输入完之后,还留有很多空白区域没有填写,一直按回车键跳转到下一页显得复杂,并且回车键经过的地方都是段落. 可以手动添加分页符,使当前页跳转到下一页. 也可以使用快捷键Ctrl + Enter ...