目的
“K8s在容器编排领域已经形成统治地位,不管是开发、运维和测试,掌握 kubernetes 都变得非常有必要。” —— 相信大家应该在各类技术论坛与博客中早已看见过如上的一段话。的确在敏捷开发占主导模式的现今,无论是项目任何阶段都随处可见K8s的身影,基础扩展要求、故障转移、部署模式等,以上这些基于K8s的特性与强大功能,都可以随时随地实现与落地。
对于测试的同学来说,测试环境的集中化、自动化管理,这些也可以依托于K8s的功能来实现。日常工作中的测试环境集群也经常会有按需调整(加入新的服务器或销毁资源)的情况,K8s可以满足我们相关的大部分工作需求。另一方面,持续集成领域中,K8s也是不可或缺的重要角色之一,有了他就可以使我们在平时的测试活动前期更加快速有效的自动部署测试环境。
所以作为有一定工作经验的测试同学来说,K8s绝对是无法绕过的一项重要技能。
接上回
上一篇我们已经基本将K8s的安装操作给完成了,那么接下来就针对K8s的使用进行基础的配置和其他相关操作的说明。
基础配置
为了实现K8s的网络集群,我们需要使用Linux中的网桥功能
检查bridge-nf-call-iptables文件内容是否为1,如不是则修改内容为1
代码语言:shell复制cat /proc/sys/net/bridge/bridge-nf-call-iptables
在/etc/sysctl.d/下创建k8s.conf文件,并写入以下内容
代码语言:shell复制net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
修改/etc/下的hosts文件,添加你的节点信息,方便查看域名映射关系
具体的IP与域名根据各自公司的业务需求进行自定义
修改本机主机名
此处也是一样,根据hosts文件中设置的对应IP与域名设置对应的主机名,可以更好的快速定位到具体节点
代码语言:shell复制hostnamectl set-hostname 要修改的主机名
节点设置
使用重定向将K8s默认配置拉取至yaml文件
代码语言:shell复制kubeadm config print init-defaults > init-config.yaml
如果报错,则将之前的init-config.yaml内的镜像仓库地址(imageRepository)换成其他国内的仓库地址。这里还是比
较推荐阿里云的仓库地址:registry.aliyuncs.com/google_containers
编辑yaml文件,找到对应的配置项
修改为阿里云的仓库地址
另外修改本机IP地址与本机节点名称
advertiseAddress修改为你的内网IP地址
name修改为你的节点名称(名称根据你的业务需要修改)
设置完成后,进行相关镜像拉取
代码语言:shell复制kubeadm config images pull --config=init-config.yaml
节点部署
使用kubeadm init
进行部署(master节点)
命令比较长使用换行方式显示
代码语言:shell复制kubeadm init
--apiserver-advertise-address=172.20.30.112
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v1.23.0
--service-cidr=172.20.30.1/24
--pod-network-cidr=172.20.30.1/24
kubeadm初始化的参数比较多,有兴趣的可以再扩展一下,以便适应各类测试环境搭建的需求
代码语言:txt复制--apiserver-advertise-address string 设置 apiserver 绑定的 IP.
--apiserver-bind-port int32 设置apiserver 监听的端口. (默认 6443)
--apiserver-cert-extra-sans strings api证书中指定额外的Subject Alternative Names (SANs) 可以是IP 也可以是DNS名称。 证书是和SAN绑定的。
--cert-dir string 证书存放的目录 (默认 "/etc/kubernetes/pki")
--certificate-key string kubeadm-cert secret 中 用于加密 control-plane 证书的key
--config string kubeadm 配置文件的路径.
--cri-socket string CRI socket 文件路径,如果为空 kubeadm 将自动发现相关的socket文件; 只有当机器中存在多个 CRI socket 或者 存在非标准 CRI socket 时才指定.
--dry-run 测试,并不真正执行;输出运行后的结果.
--feature-gates string 指定启用哪些额外的feature 使用 key=value 对的形式。
--help -h 帮助文档
--ignore-preflight-errors strings 忽略前置检查错误,被忽略的错误将被显示为警告. 例子: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
--image-repository string 选择拉取 control plane images 的镜像repo (default "k8s.gcr.io")
--kubernetes-version string 选择K8S版本. (default "stable-1")
--node-name string 指定node的名称,默认使用 node 的 hostname.
--pod-network-cidr string 指定 pod 的网络, control plane 会自动将 网络发布到其他节点的node,让其上启动的容器使用此网络
--service-cidr string 指定service 的IP 范围. (default "10.96.0.0/12")
--service-dns-domain string 指定 service 的 dns 后缀, e.g. "myorg.internal". (default "cluster.local")
--skip-certificate-key-print 不打印 control-plane 用于加密证书的key.
--skip-phases strings 跳过指定的阶段(phase)
--skip-token-print 不打印 kubeadm init 生成的 default bootstrap token
--token string 指定 node 和control plane 之间,简历双向认证的token ,格式为 [a-z0-9]{6}.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
--token-ttl duration token 自动删除的时间间隔。 (e.g. 1s, 2m, 3h). 如果设置为 '0', token 永不过期 (default 24h0m0s)
--upload-certs 上传 control-plane 证书到 kubeadm-certs Secret.
初始化成功后应显示如下提示
开始使用集群前,需要在服务器中操作以下这些命令
在用户的主目录下创建隐藏文件夹kube
代码语言:shell复制mkdir -p $HOME/.kube
复制配置文件至该目录下
代码语言:shell复制cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
修改文件路径所属权限
代码语言:shell复制chown $(id -u):$(id -g) $HOME/.kube/config
查看node节点信息
代码语言:shell复制kubectl get nodes
使用kubeadm token list
命令进行token的查看
这里需要注意:token的有效期是24小时,如果需要创建永久的可以使用kubeadm token create --ttl 0
命令
安装flannel
代码语言:shell复制kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果命令报错的话,尝试ping一下raw.githubusercontent.com,查看IP是否为185.199.109.133,如果不是的话可以修改hosts文件进行域名绑定。
添加节点至集群
命令同样可以在初始化完成后的界面中找到
代码语言:shell复制kubeadm join 172.20.30.112:6443 --token mi7wl8.t9tppdipry6tmrl4
--discovery-token-ca-cert-hash sha256:2ed5b46fac3d512fdd258ffd58a0000cea15370f33204ca44c967d063cf42ffb
在集群中创建一个pod
代码语言:shell复制kubectl run nginx --image=nginx
创建后使用命令进行pod查看
代码语言:shell复制kubectl get pods -n default
至此K8s基础集群就配置成功了,其他节点的配置方法类似。