长期支持版本

    社区创新版本

      K8S+iSulad 搭建

      除非特别说明,以下步骤在master节点和node节点均需执行,本教程以master为例

      开始之前

      需准备如下内容:

      • NestOS-22.03-date.x86_64.iso
      • 一台主机用作master,一台主机用作node

      组件下载

      编辑源文件,添加k8s的阿里云源

      vi /etc/yum.repos.d/openEuler.repo
      

      添加如下内容

      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      

      下载k8s组件以及同步系统时间所用组件

      rpm-ostree install kubelet kubeadm kubectl ntp ntpdate wget
      

      重启生效

      systemctl reboot
      

      选择最新的版本分支进入系统

      配置环境

      修改主机名,以master为例

      hostnamectl set-hostname k8s-master
      sudo -i
      

      编辑/etc/hosts

      vi /etc/hosts
      

      添加如下内容,ip为主机ip

      192.168.237.133 k8s-master
      192.168.237.135 k8s-node01
      

      同步系统时间

      ntpdate time.windows.com
      systemctl enable ntpd
      
      关闭swap分区,防火墙,selinux
      

      NestOS默认无swap分区,默认关闭防火墙, 关闭selinux如下

      vi /etc/sysconfig/selinux
      修改为SELINUX=disabled
      

      网络配置,开启相应的转发机制

      创建配置文件

      vi /etc/sysctl.d/k8s.conf
      

      添加如下内容

      net.bridge.bridge-nf-call-iptables=1
      net.bridge.bridge-nf-call-ip6tables=1
      net.ipv4.ip_forward=1
      

      使配置生效

      modprobe br_netfilter
      sysctl -p /etc/sysctl.d/k8s.conf
      

      配置iSula

      查看k8s需要的系统镜像,需注意pause的版本号

      kubeadm config images list
      

      修改daemon配置文件

      vi /etc/isulad/daemon.json
      
      ##关于添加项的解释说明##
      registry-mirrors 设置为"docker.io"
      insecure-registries 设置为"rnd-dockerhub.huawei.com"
      pod-sandbox-image 设置为"registry.aliyuncs.com/google_containers/pause:3.5"(使用阿
      里云,pause版本可在上一步查看)
      network-plugin 设置为"cni"。
      cni-bin-dir 设置为"/opt/cni/bin";
      cni-conf-dir 设置为"/etc/cni/net.d"
      

      修改后的完整文件如下

      {"group": "isula",
      "default-runtime": "lcr",
      "graph": "/var/lib/isulad",
      "state": "/var/run/isulad",
      "engine": "lcr",
      "log-level": "ERROR",
      "pidfile": "/var/run/isulad.pid",
      "log-opts": {
      "log-file-mode": "0600",
      "log-path": "/var/lib/isulad",
      "max-file": "1",
      "max-size": "30KB"
      },
      "log-driver": "stdout",
      "container-log": {
      "driver": "json-file"
      },
      "hook-spec": "/etc/default/isulad/hooks/default.json",
      "start-timeout": "2m",
      "storage-driver": "overlay2",
      "storage-opts": [
      "overlay2.override_kernel_check=true"
      ],
      "registry-mirrors": [
      "docker.io"
      ],
      "insecure-registries": [
      "rnd-dockerhub.huawei.com"
      ],
      "pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.5",
      "native.umask": "secure",
      "network-plugin": "cni",
      "cni-bin-dir": "/opt/cni/bin",
      "cni-conf-dir": "/etc/cni/net.d",
      "image-layer-check": false,
      "use-decrypted-key": true,
      "insecure-skip-verify-enforce": false
      }
      

      启动相关服务

      systemctl restart isulad
      systemctl enable isulad
      systemctl enable kubelet
      

      以上为master,node节点均需执行的操作。

      master节点初始化

      该部分仅master节点执行。 在初始化这一步会拉取镜像,需等待一小段时间,也可在该步骤之前手动拉取镜像。

      kubeadm init --kubernetes-version=1.22.2 --apiserver-advertise-
      address=192.168.237.133 --cri-socket=/var/run/isulad.sock --image-repository
      registry.aliyuncs.com/google_containers --service-cidr=10.10.0.0/16 --pod-
      network-cidr=10.122.0.0/16
      
      ##关于初始化参数的解释说明##
      kubernetes-version 为当前安装的版本
      apiserver-advertise-address 为master节点ip
      cri-socket 指定引擎为isulad
      image-repository 指定镜像源为阿里云,可省去修改tag的步骤
      service-cidr 指定service分配的ip段
      pod-network-cidr 指定pod分配的ip段
      

      初始化成功后,复制最后两行内容方便后续node节点加入使用

      kubeadm join 192.168.237.133:6443 --token j7kufw.yl1gte0v9qgxjzjw --discovery-
      token-ca-cert-hash
      sha256:73d337f5edd79dd4db997d98d329bd98020b712f8d7833c33a85d8fe44d0a4f5 --cri-
      socket=/var/run/isulad.sock
      

      注意:添加--cri-socket=/var/run/isulad.sock以使用isulad为容器引擎, 查看下载好的镜像

      isula images
      

      按照初始化成功所提示,配置集群

      mkdir -p $HOME/.kube
      cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      chown $(id -u):$(id -g) $HOME/.kube/config
      export KUBECONFIG=/etc/kubernetes/admin.conf
      source /etc/profile
      

      查看健康状态

      kubectl get cs
      

      可能存在controller-manager,scheduler状态为unhealthy的情况,解决方法如下:
      编辑相关配置文件

      vi /etc/kubernetes/manifests/kube-controller-manager.yaml
      
      注释如下内容:
      --port=0
      修改hostpath:
      将所有/usr/libexec/kubernetes/kubelet-plugins/volume/exec 修改为/opt/libexec/...
      
      vi /etc/kubernetes/manifests/kube-scheduler.yaml
      
      注释如下内容:
      --port=0
      

      修改完成后,再次查看健康状态

      配置网络插件

      仅需要在master节点配置网络插件,但是要在所有节点提前拉取镜像,拉取镜像指令如下。

      isula pull calico/node:v3.19.3
      isula pull calico/cni:v3.19.3
      isula pull calico/kube-controllers:v3.19.3
      isula pull calico/pod2daemon-flexvol:v3.19.3
      

      以下步骤仅在master节点执行 获取配置文件

      wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
      

      编辑calico.yaml 修改所有/usr/libexec/... 为 /opt/libexec/... 然后执行如下命令完成calico的安装:

      kubectl apply -f calico.yaml
      

      通过kubectl get pod -n kube-system查看calico是否安装成功 通过kubectl get pod -n kube-system查看是否所有pod状态都为running

      node节点加入集群

      在node节点执行如下指令,将node节点加入集群

      kubeadm join 192.168.237.133:6443 --token j7kufw.yl1gte0v9qgxjzjw --discovery-
      token-ca-cert-hash
      sha256:73d337f5edd79dd4db997d98d329bd98020b712f8d7833c33a85d8fe44d0a4f5 --cri-
      socket=/var/run/isulad.sock
      

      通过kubectl get node 查看master和node节点状态是否为ready

      至此,k8s部署成功。

      rpm-ostree使用

      rpm-ostree安装软件包

      安装wget

      rpm-ostree install wget
      

      重启系统,可在启动时通过键盘上下按键选择rpm包安装完成后或安装前的系统状态,其中【ostree:0】为安装之后的版本。

      systemctl reboot
      

      查看wget是否安装成功

      rpm -qa | grep wget
      

      rpm-ostree 手动更新升级 NestOS

      在NestOS中执行命令可查看当前rpm-ostree状态,可看到当前版本号

      rpm-ostree status
      

      执行检查命令查看是否有升级可用,发现存在新版本

      rpm-ostree upgrade --check
      

      预览版本的差异

      rpm-ostree upgrade --preview
      

      在最新版本中,我们将nano包做了引入。 执行如下指令会下载最新的ostree和RPM数据,不需要进行部署

      rpm-ostree upgrade --download-only
      

      重启NestOS,重启后可看到系统的新旧版本两个状态,选择最新版本的分支进入

      rpm-ostree upgrade --reboot
      

      比较NestOS版本差别

      检查状态,确认此时ostree有两个版本,分别为LTS.20210927.dev.0和LTS.20210928.dev.0

      rpm-ostree status
      

      根据commit号比较2个ostree的差别

      rpm-ostree db diff 55eed9bfc5ec fe2408e34148
      

      系统回滚

      当一个系统更新完成,之前的NestOS部署仍然在磁盘上,如果更新导致系统出现了问题,可以使用之前的部署回滚系统。

      临时回滚

      要临时回滚到之前的OS部署,在系统启动过程中按住shift键,当引导加载菜单出现时,在菜单中选择相关的分支。

      永久回滚

      要永久回滚到之前的操作系统部署,登录到目标节点,运行rpm-ostree rollback,此操作将使用之前的系统部署作为默认部署,并重新启动到其中。 执行命令,回滚到前面更新前的系统。

      rpm-ostree rollback
      

      切换版本

      在上一步将NestOS回滚到了旧版本,可以通过命令切换当前 NestOS 使用的rpm-ostree版本,将旧版本切换为新版本。

      rpm-ostree deploy -r 22.03.20220325.dev.0
      

      重启后确认目前NestOS已经使用的是新版本的ostree了。

      zincati自动更新使用

      zincati负责NestOS的自动更新,zincati通过cincinnati提供的后端来检查当前是否有可更新版本,若检测到有新版本,会通过rpm-ostree进行下载。

      目前系统默认关闭zincati自动更新服务,可通过修改配置文件设置为开机自动启动自动更新服务。

      vi /etc/zincati/config.d/95-disable-on-dev.toml
      

      将updates.enabled设置为true 同时增加配置文件,修改cincinnati后端地址

      vi /etc/zincati/config.d/update-cincinnati.toml
      

      添加如下内容

      [cincinnati]
      base_url="http://nestos.org.cn:8080"
      

      设置zincati服务开机自动启动(重启机器生效)

      systemctl enable zincati.service
      

      重新启动zincati服务

      systemctl restart zincati.service
      

      当有新版本时,zincati会自动检测到可更新版本,此时查看rpm-ostree状态,可以看到状态是“busy”,说明系统正在升级中。

      一段时间后NestOS将自动重启,此时再次登录NestOS,可以再次确认rpm-ostree的状态,如果状态转为"idle",而且当前版本已经是“20220325”,这说明rpm-ostree版本已经升级了。

      查看zincati服务的日志,确认升级的过程和重启系统的日志。另外日志显示的"auto-updates logic enabled"也说明更新是自动的。

      定制NestOS

      我们可以使用nestos-installer 工具对原始的NestOS ISO文件进行加工,将Ignition文件打包进去从而生成定制的 NestOS ISO文件。使用定制的NestOS ISO文件可以在系统启动完成后自动执行NestOS的安装,因此NestOS的安装会更加简单。

      在开始定制NestOS之前,需要做如下准备工作:

      • 下载 NestOS ISO
      • 准备 config.ign文件

      生成定制NestOS ISO文件

      设置参数变量

      $ export COREOS_ISO_ORIGIN_FILE=nestos-22.03.20220324.x86_64.iso
      $ export COREOS_ISO_CUSTOMIZED_FILE=my-nestos.iso
      $ export IGN_FILE=config.ign
      

      ISO文件检查

      确认原始的NestOS ISO文件中没有包含Ignition配置。

      $ nestos-installer iso ignition show $COREOS_ISO_ORIGIN_FILE 
      
      Error: No embedded Ignition config.
      

      生成定制NestOS ISO文件

      将Ignition文件和原始NestOS ISO文件打包生成定制的NestOS ISO文件。

      $ nestos-installer iso ignition embed $COREOS_ISO_ORIGIN_FILE --ignition-file $IGN_FILE $COREOS_ISO_ORIGIN_FILE --output $COREOS_ISO_CUSTOMIZED_FILE
      

      ISO文件检查

      确认定制NestOS ISO 文件中已经包含Ignition配置了

      $ nestos-installer iso ignition show $COREOS_ISO_CUSTOMIZED_FILE
      

      执行命令,将会显示Ignition配置内容

      安装定制NestOS ISO文件

      使用定制的 NestOS ISO 文件可以直接引导安装,并根据Ignition自动完成NestOS的安装。在完成安装后,我们可以直接在虚拟机的控制台上用nest/password登录NestOS。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份