vlambda博客
学习文章列表

容器 & 服务:Kubernetes 运维记录

系列文章:

容器 & 服务:开篇,压力与资源

容器 & 服务:一个 Java 应用的 Docker 构建实战

容器 & 服务:Docker 应用的 Jenkins 构建

容器 & 服务:Docker 应用的 Jenkins 构建 (二)

容器 & 服务:K8s 与 Docker 应用集群 (一)

容器 & 服务:K8s 与 Docker 应用集群 (二)

容器 & 服务:Kubernetes 构件及 Deployment 操作

容器 & 服务: ClickHouse 与 k8s 架构

容器 & 服务: 扩容

容器 & 服务:metrics-server 探索

容器 & 服务:Helm Charts(一)

容器 & 服务:Helm Charts(二)安装与使用

容器 & 服务:Helm Charts(三)K8s 集群信息

容器 & 服务:Kubernetes API Server 访问问题

一 概述

忙了一个月,经历了一段连续工作周末午休的奋斗时光,终于保障了产品的按时发版,也正式的松了口气。睡了几天,让疲劳的身体得以恢复,准备下一次战斗。

不得不说,随着年龄的增长,精力确实有所下降,趁着几天假期,又捡起了撸铁跑步等各项运动,希望能够借此拉长自己的职业生涯,也让身体衰老的缓慢一些吧。

顺便这里先插一条招聘消息:百度2022春季实习生校园招聘内推已经开始,可填入内推码ISVM21完成投递。话不多说,开始分享最近在k8s使用和运维上遇到的一些问题和解决经验。

二 基础信息

2.1 背景介绍

目前使用的开发工具,除Java-maven-spring进行开发之外,持续集成部分使用公司开发的流水线工具,集成docker&k8s能力实现。在代码开发完成,提交并审核通过后,会走编译、镜像构建、chart集成、镜像发布等步骤,把镜像发布到镜像仓库,之后chart也会更新。在后续的部署环节,就可以通过脚本拉取对应的chart版本并通过helm install等命令执行部署,完成目标环境的版本更新。整体采用基于k8s的服务(容器)架构,mysql、redis、mongodb,以及kafka、监控(prometheus)等底层存储和中间件,都采用了容器化管理。服务访问关系如下图所示:


2.2 版本信息

当前使用的环境,docker、k8s等版本信息如下:

docker version

Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10


kubectl version:

Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:23:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:13:49Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

helm charts:

version.BuildInfo{Version:"v3.0.2", GitCommit:"19e47ee3283ae98139d98460de796c1be1e3975f", GitTreeState:"clean", GoVersion:"go1.13.5"}

三 运维工具

3.1 k8s dashboard

3.1.1 基础介绍

kubernets集群中,管理资源的方法有四种:命令行(shell)、yaml、api,以及图形界面(即dashboard)。其中,我们通常在持续集成时会使用yaml文件做发布配置,运维时通过命令行操作来执行安装、重启、查看日志等常规操作;而dashboard则是日常观察和问题排查的简单且便捷的方式。通过图形化管理界面,能够利用metric-server实现node和pod的监控。

dashboard的安装这里不再赘述,如果是mac环境,那么可以参考Docker-mac下环境搭建这篇文章。如果是linux或其他操作系统,官方文档和很多技术博客上也有详细的描述。如果有问题可在评论区留言沟通。

3.1.2 dashboard登录

如果在安装dashboard时设置了访问密钥/token,那么在通过浏览器登录时,会遇到如下提示:

容器 & 服务:Kubernetes 运维记录

有些可以支持跳过建群,点skip直接进入主界面即可。但也有些会要求我们输入token。

查看token方法(假设使用默认的kube-system):

kubectl -n kube-system describe secret

但这样可能会看到返回了很多的带有不通name的token信息。

容器 & 服务:Kubernetes 运维记录

我们要获取精确的token,那么我们需要定位到kubernets-dashboard-token这项:

kubectl  describe  secret  kubernetes-dashboard-token-${xxxx}  -n  kube-system

把这里的token字符串复制,粘贴到 Enter token的行中,Sign in即可。

通过dashboard,我们可以查看各service、deployment、pod的健康状况,并在config map中查看已配置参数(运维中很重要,一些服务启动异常,往往是配置有误导致的)。