tags
云原生
k8s
docker
type
Post
status
Published
slug
kuberkey-kubesphere-k8s
date
Jul 13, 2022
summary
kubekey和kubesphere真是k8s的利器
category
软件工具
icon
password

前言

这里将借用KubeKey 和KubeSphere官方提供的安装脚本,快速搭建一个带KubeSphere平台的K8s集群。KubeSphere的面板相比Kubernetes的DashBoard更加直观并且实用。
KubeSphere面板
KubeSphere面板
Kubernetes Dashboard
Kubernetes Dashboard

准备服务器

  • 虚拟机要开启时间同步
    • # 矫正时间
      yum install ntp
      
      vi /etc/ntp.conf # 新增以下看两行内容
      
      server ntp1.aliyun.com prefer
      server ntp2.aliyun.com
      
      # 设置时区
      timedatectl set-timezone Asia/Shanghai
      
      chkconfig ntpd on
  • 提前修改pip的conf ,否则KubeSphere安装脚本中的默认清华源会提示警告错误,耽误时间
    • cat > ~/.pip/pip.conf << EOF
      [global]
      index-url=https://mirrors.aliyun.com/pypi/simple
      EOF
  • 偶尔会出现packagekit服务阻塞yum服务的正常安装,推荐关闭此服务。
    • #  停掉 正在运行的packagekit
      systemctl stop packagekit
      systemctl disable packagekit
  • 建议安装过程打几个快照,尤其是在纯净系统的时候打快照,以便于重新安装或测试。(用空间换取时间)

一、使用kubekey (kk)安装

为什么选择 KubeKey

  • 以前基于 ansible 的安装程序依赖于许多软件,例如 Python。KubeKey 由 Go 语言开发,可以消除在多种环境中出现的问题,确保成功安装。
  • KubeKey 使用 Kubeadm 在节点上尽可能多地并行安装 Kubernetes 集群,使安装更简便,提高效率。与旧版的安装程序相比,它极大地节省了安装时间。
  • KubeKey 旨在将集群作为对象来进行安装,即 CaaO。
 

All-in-One 脚本示例

以下是我从一个纯净的CentOS系统,一步步执行成功安装AllinOne的KubeSphere+K8s环境的脚本。
# hostname
hostnamectl set-hostname master
#  防火墙
systemctl disable firewalld
systemctl stop firewalld
#  关闭swap
swapoff -a
echo "vm.swappiness=0" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
sed -i 's$/dev/mapper/centos-swap$#/dev/mapper/centos-swap$g' /etc/fstab
# 检查确认 
free -m 
# 检查关闭enforce
getenforce
vim /etc/selinux/config 
vim /etc/sysconfig/selinux
# 设置为 disabled后重启
reboot


# 安装需要环境
yum install -y ebtables socat ipset conntrack

# 安装docker
## 卸载旧版 yum remove docker-ce* && yum remove containerd.io.x86_64
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9
systemctl enable docker && systemctl start docker
systemctl status docker
# 镜像加速
cat <<EOF  > /etc/docker/daemon.json       
{"registry-mirrors": ["https://gqk8w9va.mirror.aliyuncs.com"]}
EOF

systemctl restart docker
systemctl status docker
docker  info | grep  "Registry Mirrors" -A 1

# 检查 dns
cat /etc/resolv.conf

#  安装kk准备
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum makecache fast
yum install -y kubelet-1.17.9 kubectl-1.17.9
yum install -y wget
export KKZONE=cn
wget -c https://kubesphere.io/download/kubekey-v1.0.0-linux-amd64.tar.gz -O - | tar -xz
chmod +x kk

# 创建环境
./kk create cluster --with-kubernetes v1.17.9 --with-kubesphere v3.0.0

安装完成

根据你的网络情况,安装过程可能需要几十分钟,不要着急。安装完成后控制台会显示出你的额KubeSphere访问面板地址。
notion image

检验安装结果

你可以随时输入以下指令,查看KubeSphere平台 安装、更新的结果:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-installer -o jsonpath='{.items[0].metadata.name}') -f
 

单节点扩展为多结点

参照文档编辑你的节点配置文件
  • 创建一个实例脚本
    • ./kk create config --from-cluster
  • 编辑脚本:在脚本中添加你的节点配置 vim ~/sample.yml
    • apiVersion: kubekey.kubesphere.io/v1alpha1
      kind: Cluster
      metadata:
        name: sample
      spec:
        hosts: 
        # You should complete the ssh information of the hosts
        - {name: master, address: 192.168.1.25, internalAddress: 192.168.1.25}
        - {name: node1, address: 192.168.1.54, internalAddress: 192.168.1.54, user:root, password: root}
        roleGroups:
          etcd:
          - master
          master:
          - master
          worker:
          - node1
        controlPlaneEndpoint:
          # If loadbalancer was used, 'address' should be set to loadbalancer's ip.
          domain: lb.kubesphere.local
          address: ""
          port: 6443
        kubernetes:
          version: v1.17.9
          imageRepo: kubesphere
          clusterName: cluster.local
          proxyMode: ipvs
          masqueradeAll: false
          maxPods: 110
          nodeCidrMaskSize: 24
        network:
          plugin: calico
          kubePodsCIDR: 10.233.64.0/18
          kubeServiceCIDR: 10.233.0.0/18
        registry:
          privateRegistry: ""
 
然后执行以下命令即可
./kk add nodes -f sample.yaml

二、ks-installer安装器安装KubeSphere环境

这是基于ansible的安装程序,我在用安装器安装AllinOne时出现了安装错误,建议在安装多结点(Muti-Node)模式使用以下脚本:

下载脚本

curl -L https://kubesphere.io/download/stable/v2.1.1 > installer.tar.gz \
&& tar -zxf installer.tar.gz && cd kubesphere-all-v2.1.1/scripts
# 安装AllinOne

安装Multi-Node

需要先修改conf/hosts.ini、conf/common.yaml ,并且设置好主机对应的hostname、关闭防火墙。
执行安装器安装即可。
cd ~/kubesphere-all-v2.1.1/scripts/
./install.sh
notion image
输入2,按下回车即可安装。
 
检查安装结果
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath={.items[0].metadata.name}) -f
 

三、可插拔组件的安装

  • 你可以随时用命令行修改ks的ConfigMap文件,从而实现更新ks-installer。
    • kubectl edit cm -n kubesphere-system ks-installer
      修改完成后用以下命令检查更新结果
      kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath={.items[0].metadata.name}) -f
  • 更可以在kubesphere控制台中直接修改 ks.installer 的配置文件
    • notion image
      notion image

示例-KubeSpereh增加ES日志查询

云原生实战第二期 Kubernetes+Service Mesh+Prometheus+Kubevirt_哔哩哔哩_bilibili
云原生实战第二期课程集结了十多位 KubeSphere 团队核心研发人员,使用 KubeSphere 作为教学工具,采用 KubeSphere 搭建开源的企业级容器云平台,深入浅出讲解 KubeSphere 生态所有流行的开源项目,包含 K8s/Jenkins/Istio/Jaeger/Prometheus/ELK 等全套云原生方案,构建一站式云原生 DevOps 平台,更有 Spring Clo, 视频播放量 27679、弹幕量 36、点赞数 279、投硬币枚数 189、收藏人数 2280、转发人数 100, 视频作者 KubeSphere, 作者简介 分享 K8s 与云原生(公众号:KubeSphere云原生,官网:https://kubesphere.com.cn),相关视频:云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps,云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps,DevOps实践之基于Jenkins与gitlab的持续集成 / CICD / Sonarqube / 云原生,尚硅谷Sharding Sphere,Sharding JDBC,分库分表利器,数据库中间件,【尚硅谷】Kubernetes(k8s)入门到实战教程丨全新升级完整版,成功上岸!将自己花2万多买的云原生教程,整整300集,免费分享给大家~拿走不谢!学不会退出IT界!,云原生服务网格化Service Mesh入门到精通,SpringBoot+Prometheus+grafana监控+alertmanager+企业微信报警(微服务落地监控告警),【Devops教程100集】2022年B站最适合新手学的Devops运维实战教程 | devops运维 | devops开发 | devops实践,Prometheus+Grafana(Kubernetes)企业级监控
云原生实战第二期 Kubernetes+Service Mesh+Prometheus+Kubevirt_哔哩哔哩_bilibili
KubeSphere 日志系统
KubeSphere 为日志收集、查询和管理提供了一个强大的、全面的、易于使用的日志系统。它涵盖了不同层级的日志,包括租户、基础设施资源和应用。用户可以从项目、工作负载、容器组和关键字等不同维度对日志进行搜索。与 Kibana 相比,KubeSphere 基于租户的日志系统中,每个租户只能查看自己的日志,从而可以在租户之间提供更好的隔离性和安全性。除了 KubeSphere 自身的日志系统,该容器平台还允许用户添加第三方日志收集器,如 Elasticsearch、Kafka 和 Fluentd。 有关更多信息,请参见 日志查询 。 当您在 Linux 上安装 KubeSphere 时,首先需要创建一个配置文件,该文件列出了所有 KubeSphere 组件。 在 Linux 上安装 KubeSphere 时,您需要创建一个默认文件 config-sample.yaml 。通过执行以下命令修改该文件: 在该文件中,搜寻到 logging,并将 enabled 的 false 改为 true 。完成后保存文件。 信息 若使用 containerd 作为容器运行时,请将 containerruntime 字段的值更改为 containerd。如果您从低版本升级至 KubeSphere 3.3.0,则启用 KubeSphere 日志系统时必须在 logging 字段下手动添加 containerruntime 字段。 备注 默认情况下,如果启用了日志系统,KubeKey 将安装内置 Elasticsearch。对于生产环境,如果您想启用日志系统,强烈建议在 config-sample.yaml 中设置以下值,尤其是 externalElasticsearchUrl 和 externalElasticsearchPort 。在安装前提供以下信息后,KubeKey 将直接对接您的外部 Elasticsearch,不再安装内置 Elasticsearch。 es: # Storage backend for logging, tracing, events and auditing.
KubeSphere 日志系统

示例 - KubeSphere增加NFS卷类型

默认安装的KuberSphere只有 一个Local文件类型,这里可以安装一个NFS卷类型:

1. 系统安装NFS服务

  • 执行以下脚本,安装NFS服务,并准备将/data目录作为服务目录:
    • yum install -y nfs-utils
      systemctl enable rpcbind  && systemctl start rpcbind
      systemctl enable nfs && systemctl start nfs
      mkdir /data
      chmod 755 /data
  • 执行 vi /etc/exports 修改NFS的目录配置
    • 文本内容: /data/ 192.168.31.0/24(rw,sync,no_root_squash,no_all_squash)
      💡
      说明:
      1. /data: 共享目录位置。
      1. 192.168.31.0/24: 客户端 IP 范围,*代表所有,即没有限制。
      1. rw: 权限设置,可读可写。
      1. sync: 同步共享目录。
      1. no_root_squash: 可以使用 root 授权。
      1. no_all_squash: 可以使用普通用户授权。
  • 修改后重启NFS systemctl restart nfs
  • 执行showmount -e localhost 可以查看当前被作为NFS服务的目录文件夹

2. 客户端 配置

  • 开启rpc服务 systemctl enable rpcbind && systemctl start rpcbind
  • 读取NFS服务器可挂载的文件夹列表 showmount -e 192.168.31.39
    • 注意master需要关闭防火墙
  • 客户端创建相同目录mkdir /data
  • 挂载 mount -t nfs 192.168.31.39:/data /data

3.更新KubeSphere环境

  • 理想情况下,首次使用一键脚本安装配置
    • 如果你在首次执行./install.sh安装器部署带有KubeSphere环境前,已经安装好NFS环境,并按照以下配置修改 conf/common.yaml , 这时你安装的k8s是默认具有NFS卷类型支持的,并且NFS被设置为是默认的卷类型。
      # Local Volume
      local_volume_enabled: true
      local_volume_is_default_class: false   # 先将集群默认的存储类型 Local Volume 设置为 false
      
      # NFS CONFIGURATION
      # KubeSphere can use existing nfs service as backend storage service.
      # change to true to use nfs.
      
      nfs_client_enabled: true              # 设置为 true 开启客户端的安装
      nfs_client_is_default_class: true     # 设置为默认的存储类型
      
      # Hostname of the NFS server(ip or hostname)
      nfs_server: 192.168.31.39   # 替换为您 NFS server 实际的 IP 地址或 hostname
      
      # Basepath of the mount point
      nfs_path: /data  # 	NFS server 的共享目录
      nfs_vers3_enabled: false
      nfs_archiveOnDelete: false

示例- 安装devops

官方推荐,在muti-node模式下,需要一台主机节点大于8G,才可以安装,否则可能效果并不理想,开启DevOps参考以下文档,此处不再赘述。
KubeSphere DevOps 系统
KubeSphere 针对容器与 Kubernetes 的应用场景,基于 Jenkins 提供了一站式 DevOps 系统,包括丰富的 CI/CD 流水线构建与插件管理功能,还提供 Binary-to-Image(B2I)、Source-to-Image(S2I),为流水线、S2I、B2I 提供代码依赖缓存支持,以及代码质量管理与流水线日志等功能。 内置的 DevOps 系统将应用的开发和自动发布与容器平台进行了很好的结合,还支持对接第三方的私有镜像仓库和代码仓库形成完善的私有场景下的 CI/CD,提供了端到端的用户体验。 可参考如下文档进一步了解 KubeSphere DevOps 系统的功能: 注意:开启可选功能组件之前,请先参考 可插拔功能组件列表 ,确认集群的可用 CPU 与内存空间是否充足,开启安装前可能需要提前扩容集群或机器配置,否则可能会因为资源不足而导致的机器崩溃或其它问题。 注意,本篇文档仅适用于 Linux Installer 安装的环境,若 KubeSphere 部署在 Kubernetes 之上,需提前创建 CA 证书,请参考 ks-installer 。 安装前,在 installer 目录下编辑 conf/common.yaml 文件,然后参考如下开启。 提示:KubeSphere 支持对接外置的 SonarQube,若您已有外置的 SonarQube,建议在以下参数中配置对接,可减少 KubeSphere 集群的资源消耗。 通过修改 ks-installer 的 configmap 可以选装组件,执行以下命令(kubectl 命令需要以 root 用户执行)。 $ kubectl edit cm -n kubesphere-system ks-installer 参考如下修改 ConfigMap 保存退出,参考 验证可插拔功能组件的安装 ,无需再次执行安装命令 ./install.sh,仅需通过查询 ks-installer 日志或 Pod 状态即可验证功能组件是否安装成功。

参考文档

KubeSphere文档

Kubekey文档

在 Kubernetes集群中 安装 KubeSphere2.1
 

一些QA

  • 安装过程可能出现pip源的警告。这是由于ks-installer安装器默认的清华源有问题,需要按照文章上面的方法修改为默认使用阿里源。
    • Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple, https://mirrors.aliyun.com/pypi/simple
      WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)'),)': /simple/pip/
  • 可能出现安装失败
    • 使用ks-installer安装器或KubeKey都要求系统是完全纯净的,如果装了其他库依赖例如自己安装了Docker的其他版本,都会导致安装错误,这时候利用你的服务器快照回滚到最初的版本,重新安装试一下。
       

  • Utterance
  • Cusdis