2021年上半年,我的技术提升以及生活习惯的改变。
技术层
在2013年到2020年,大部分的时间还是在摸索Java、SpringCloud等应用型技术,大都数都是在应用实战方面。自2020年底开始正式进入云原生时代的学习。期间涉及到的可能较多,这里列出几个重要的点:
- 基于Kubesphere定制化容器云
- 服务网格ServiceMesh调研
- 定制化AI引擎到JupyterLab
容器云方面,我调研Kubesphere开源技术,以及结合我们实际需求,开始定制化一些实际需求并开发。完成了Kubesphere的本地部署:
定制化了基于Loki的日志以及事件收集和查询展示,因为本身Kubesphere暂时只支持基于ES的日志、事件处理。需要对Loki进行注册:
apiVersion: logging.kubesphere.io/v1alpha2
kind: Output
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: >
{"apiVersion":"logging.kubesphere.io/v1alpha2","kind":"Output","metadata":{"annotations":{},"labels":{"logging.kubesphere.io/component":"logging","logging.kubesphere.io/enabled":"true"},"name":"loki","namespace":"kubesphere-logging-system"},"spec":{"loki":{"host":"loki.loki.svc","port":3100},"matchRegex":"(?:kube|service)\\.(.*)"}}
labels:
logging.kubesphere.io/component: logging
logging.kubesphere.io/enabled: 'true'
name: loki
namespace: kubesphere-logging-system
spec:
loki:
host: loki.loki.svc
port: 3100
matchRegex: '(?:kube|service)\.(.*)'
复制代码
要将日志输出到loki,执行下面的命令:
cat <<EOF | kubectl apply -f -
apiVersion: logging.kubesphere.io/v1alpha2
kind: Output
metadata:
name: loki
namespace: kubesphere-logging-system
labels:
logging.kubesphere.io/enabled: "true"
logging.kubesphere.io/component: logging
spec:
matchRegex: (?:kube|service)\.(.*)
loki:
host: ""
port: ""
EOF
复制代码
如果是将事件输出到loki,执行:
cat <<EOF | kubectl apply -f -
apiVersion: logging.kubesphere.io/v1alpha2
kind: Output
metadata:
name: loki-events
namespace: kubesphere-logging-system
labels:
logging.kubesphere.io/enabled: "true"
logging.kubesphere.io/component: events
spec:
match: kube_events
loki:
host: ""
port: ""
EOF
复制代码
同时,我们修改了Kubesphere原生的鉴权模式,根据我们的实际需求,结合业务情况来进行鉴权处理。并且,我们添加了隔离空间的概念,这样可以将不同的人归为不同的组,他们的权限也是不一样的。
对于服务网格,我们调研了很流行的开源服务网格的实现Istio,了解到:
Istio 提供了 4 个与服务相关的核心功能,分别是连接(Connect)、安全(Secure)、控制(Control)和观察(Observe)。
-
连接功能指的是控制服务之间的流量和 API 调用。只需要简单的配置,就可以实现服务之间的超时处理、自动重试和断路器模式,还可以通过基于百分比的流量分离来实现 A/B 测试、红黑部署和金丝雀发布等。Istio 还提供了错误恢复功能,可以增强服务的健壮性。
-
安全功能指的是自动保护服务的安全,支持服务之间的身份认证、授权管理和通信加密。Istio 提供了一个证书权威机构(Certificate Authority,CA)来管理密钥和证书。在身份认证方面,Istio 支持双向 TLS 认证,以及基于 JWT 的请求身份认证,并可以与 OpenID Connect 提供者进行集成。在授权管理方面,Istio 支持使用 Kubernetes 的自定义资源来配置授权策略。除此之外,Istio 的审计功能可以记录安全相关的历史操作。
-
控制指的是通过策略来对服务进行配置。Istio 提供了一系列 Kubernetes 中的自定义资源定义来配置 Istio 的不同组件的行为。
-
观察指的是服务运行时行为的可见性。Istio 收集的性能指标数据可以监控应用的性能。分布式追踪数据可以查看每个请求在服务之间的调用关系,从而更好地了解服务之间的依赖关系。Istio 可以在日志中记录每个请求的源和目标的元数据。
基于API网关,作为应用请求入口,同时,依赖底层支持的服务发现来提供一系列功能。
最后,对于AI引擎定制化JupyterLab,我们基于开源的Jupyter,实现了无需安装配置,在创建Notebook实例后,打开实例即可进行开发。主要如TensorFlow2.0、PyTorch1.0等。该环境中包含已经预装并调试好的AI引擎以及依赖。
具体的实现方案是:基于NoteBook kernel,我们在Lab中,利用conda集成几种用户常用的独立执行环境。
RUN conda update conda -n base -y
RUN bash
RUN conda init bash
RUN bash
RUN conda create -y -n TensorFlow2.0 python=3.6
RUN conda activate TensorFlow2.0
RUN conda install -y ipykernel
RUN python -m ipykernel install --name TensorFlow2.0
复制代码
生活层
从14年,一直健身的我,自从进入繁忙的工作状态或家事中,就开始颓废了。曾今的每天80个俯卧撑的flag消失了。在今年年初,开始了flag的启动,正式每天下午开始60个俯卧撑的flag,以及每周五晚上的篮球模式。曾今的腹肌到后面的大肚腩,再到现在的腹肌渐显,感觉找到了人生的自信。
实际行动
- 在每天下午3点,当小米手表闹钟提示的时候,立刻放下手头的工作,起身去找个无人偏僻的地方开始60个俯卧撑
- 每周五晚上7点,约上小区附近的友人,一起找个小场地开始从小到大的乐趣
- 每天坚持十点半睡觉
总结
不忘初心,砥砺前行~