Uk8s新用户接入指南

2021-06-30  本文已影响0人  行者深蓝

Uk8s新用户接入指南

基础使用

Uk8s 产品化功能支持程度概述

以下表格主要体现了,k8s原生能力之外,结合Ucloud云平台产品化能力的支持程度

功能 ucloud 备注
集群网络 vpc cni underlay的网络模型
负载均衡 支持
Ingress 需要部署开源软件
块存储卷(storage-class) 支持
NFS 动态存储卷(storage-class) 支持
对象存储(storage-class) 支持
弹性伸缩 支持 CA HPA VPA
GPU节点 支持
高性能计算节点 支持
混合云/托管区节点 支持 需要打通托管区网络,只能添加托管区节点作为node节点
制品库 uhub
多集群管理 仅限创建,删除
租户权限
应用管理
发布管理
微服务
日志 仅限于单集群
监控 仅限于单集群
链路追踪

Uk8s 历史案例记录

  1. 新建 Uk8s 集群注意事项

    1. Master 节点配置,建议选择不同可用区,默认是单一可用区,不满足高可以用要求
    2. Master 节点,Node节点,建议选择性能更好的 快杰O机型云主机,默认是 N型 普通云主机
    3. 外网APIServer 建议关闭,默认打开
    4. kube-proxy 建议选择ipvs模式,默认是iptable模式
    5. 管理设置-> 更过设置-> 集群本地域名: 建议更改为和集群用途相关的域名,默认是cluster.local,在多集群日志采集,监控采集,使用默认域名会导致采集数据分类困难
  2. 配置动态存储卷

    1. 新建 Uk8s 默认提供的块存储的 storage-class,容器应用常用是共享文件存储类型的storage-class,基于UFS创建 nfs 动态存储卷配置过程参考如下:
    2. 首先在ucloud 控制台创建UFS存储,选择 k8s集群所在的vpc 子网 创建UFS挂载点,StorageClass部署参考 https://github.com/panhaitao/k8s-app/tree/main/deploy-for-k8s/StorageClass-UFS
git clone https://github.com/panhaitao/k8s-app.git 
cd k8s-app/deploy-for-k8s/StorageClass-UFS/ 

  1. 修改 deployment.yaml 配置中 挂载点ufs_server_ip 和storage 大小,顺序执行如下命令:
kubectl apply -f deployment.yaml
kubectl apply -f rbac.yaml
kubectl apply -f class.yaml 

  1. 检查确认执行命令:kubectl get pod 返回如下结果为正常
NAME READY STATUS RESTARTS AGE nfs-client-provisioner-58886b744d-dg7gh 1/1 Running 0 6m39s 执行命令:kubectl get sc 返回结果包含如部分为正常 ufs-nfsv4-storage (default) ucloud/ufsprovisioner Delete Immediate false 12m 

  1. 安装 Helm 包管理器

Helm 类似 Linux 操作系统中的包管理工具,如 CentOS 发行版中的的 yum,Debian发行版中的的 apt。Helm 让 Kubernetes 的用户可以像安装软件包一样,轻松查找、部署、升级或卸载各种容器软件包,推荐使用helm v3版本来管理容器应用,登录k8s集群任意一台master,执行如下命令

wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz #或 wget https://mirrors.huaweicloud.com/helm/v3.5.2/helm-v3.5.2-linux-amd64.tar.gz 
tar -xf helm-v3.5.2-linux-amd64.tar.gz 
mv linux-amd64/helm /usr/bin/ 
chmod 755 /usr/bin/helm

  1. 对接日志系统

Uk8s集群节点的日志目录层级如下: /var/log/containers -> /var/log/pods -> /data/docker/container,在对接第三方日志系统需要将 /data/docker/container 目录也挂载到volumes 中,例如以 filebeat agent的DS配置为例,需要补充如下参考部分,其他类同:

volumeMounts:
  - mountPath: /data/docker/containers
    name: data-containers
volumes:
- hostPath:
    path: /data/docker/containers
    type: ""
  name: data-containers

  1. 跨集群服务调用

跨集群服务调用可以采用ingress结合LB实现,常见场景可参考如下文档:

https://www.jianshu.com/p/2919f64299b2 配置ingress网关服务小节,其中包括

  1. 部署公网 LB 版的 nginx ingress
  2. 部署内网 LB 版的 nginx ingress

https://www.jianshu.com/p/49e3abddd05a ingress-nginx常见参考配置场景指南,其中包括,

  1. 配置 ingress 支持 websocket 协议

  2. 配置 Ingress 支持 tcp/udp 转发

  3. 配置 Ingress 绑定ULB 实现 http 跳转https功能

  4. 关于pod热更新

按照k8s编排调度的设计理念,POD并不等同于虚拟机,POD是在Service后是动态存在的最小调度单元,这里可能需要对业务应用部署架构作适当的调整,来匹配k8s编排调度方式

  1. 关于单容器多进程

虚拟机的方式部署比较常见一个虚拟机内运行多个进程,在容器内,原则上一个容器实例只运行一个进程

  1. 如果有特殊场景需要一个容器实例内运行多个进程,可以使用在编写Dockerfile 使用 supervisor 类进程管理工具来实现

  2. 推荐使用容器组方式,把多个进程分别封装在不同容器实例内,使用link机制关联起来,POD本身的设计就是就是容器组方式,一个pod单元由一个根容器和其它一个或多个containers组成

  3. 关于如何定义pod启动顺序

    1. 可以通过 initContainers 方式来实现控制POD启动顺序,例如如下配置片段,展示了一个具有 2 个 Init 容器的简单 Pod。 第一个等待 myservice 启动,第二个等待 mydb 启动。 一旦这两个 Service 都启动完成,Pod 将开始启动
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

上一篇下一篇

猜你喜欢

热点阅读