作者:老 Z,中电信数智科技有限公司山东分公司运维架构师,云原生爱好者,目前专心于云原生运维,云原生领域技能栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。

前语

导图

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

知识点

  • 定级:入门级
  • KubeKey 装置布置 KubeSphere 和 Kubernetes
  • Ubuntu 操作体系的根本装备
  • Kubernetes 常用作业负载的创立

演示服务器装备

主机名 IP CPU 内存 体系盘 数据盘 用处
ks-master-0 192.168.9.91 4 16 40 200 KubeSphere/k8s-master/k8s-worker
ks-master-1 192.168.9.92 4 16 40 200 KubeSphere/k8s-master/k8s-worker
ks-master-2 192.168.9.93 4 16 40 200 KubeSphere/k8s-master/k8s-worker
算计 3 12 48 120 600

演示环境涉及软件版别信息

  • 操作体系:Ubuntu 22.04.2 LTS
  • KubeSphere:3.3.2
  • Kubernetes:v1.25.5
  • KubeKey: v3.0.7

简介

本文介绍了如何在 Ubuntu 22.04 LTS 服务器上布置 KubeSphere 和 Kubernetes 集群。咱们将运用 KubeSphere 开发的 KubeKey 工具实现自动化布置,在三台服务器上实现高可用形式最小化布置 Kubernetes 集群和 KubeSphere。咱们将提供具体的布置说明,以便读者轻松地完结布置过程。

操作体系根底装备

请注意,以下操作无特别说明时需在一切 Ubuntu 服务器上履行。本文只选取其中一台服务器作为演示,并假定其他服务器都已依照相同的方法进行装备和设置。

创立用户

在装置 KubeSphere 和 Kubernetes 之前,需求创立一个普通用户,该用户可所以装置 Ubuntu 体系时默许创立的初始用户 ubuntu,也可所以新创立的用户。在本文中,咱们将运用新建用户 kube 作为示例。

  • 创立用户并设置暗码

经过履行以下指令,创立一个名为 kube 的新用户,并设置该用户的暗码。在提示输入暗码时,请输入所需的暗码并进行承认。

sudo useradd -m -s /bin/bash kube
sudo passwd kube
  • 装备用户免暗码履行指令

为了装置和布置 KubeSphere 和 Kubernetes,需求将 kube 用户装备为无需暗码即可运用 sudo 切换到 root 用户履行体系指令。

要让 kube 用户无需暗码即可运用 sudo 指令,请履行以下指令。

cat <<EOF | sudo tee /etc/sudoers.d/kube
Defaults:kube !fqdn
Defaults:kube !requiretty
kube ALL=(ALL) NOPASSWD: ALL
EOF

装备主机名

sudo hostnamectl hostname ks-master-0

装备 hosts 文件

修正 /etc/hosts 文件,将规划的服务器 IP 和主机名添加到文件中。

192.168.9.91    ks-master-0
192.168.9.92    ks-master-1
192.168.9.93    ks-master-2

装备根据 SSH 密钥的身份验证

KubeKey 支持在自动化布置 KubeSphere 和 Kubernetes 服务时,使用暗码和密钥作为远程服务器的衔接验证方法。本文会演示一起运用暗码和密钥的装备方法,因而,需求为布置用户 kube 装备免暗码 SSH 身份验证。

本末节为可选装备项,如果你运用纯暗码的方法作为服务器远程衔接认证方法,能够疏忽本节内容。

本文将 master-0 节点作为布置节点,下面的操作需求在 master-0 节点操作。

以 kube 用户登陆体系,然后运用 ssh-keygen 指令生成一个新的 SSH 密钥对,指令完结后,SSH 公钥和私钥将存储在 /home/kube/.ssh 目录中。

su - kube
ssh-keygen -t ed25519

指令履行效果如下:

ubuntu@ks-master-0:~$ su - kube
Password:
kube@ks-master-0:~$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/kube/.ssh/id_ed25519):
Created directory '/home/kube/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/kube/.ssh/id_ed25519
Your public key has been saved in /home/kube/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:tQzVX/3bF87KzKjYnZcm6M3wdMRRlKyixFtCTQOcBks kube@ks-master-0
The key's randomart image is:
+--[ED25519 256]--+
|       Eo.*+  ooo|
|      . .* .o .oo|
|       .= .  o...|
|         B +..o..|
|        S B .oo +|
|         o  .  +o|
|         ...=.o .|
|        o.BooO   |
|       ..+.*+    |
+----[SHA256]-----+

接下来,输入以下指令将 SSH 公钥从 master-0 节点发送到其他节点。指令履行时输入 yes,以承受服务器的 SSH 指纹,然后在呈现提示时输入 kube 用户的暗码。

ssh-copy-id kube@ks-master-0

下面是密钥复制时,正确的输出成果:

kube@ks-master-0:~$ ssh-copy-id kube@ks-master-0
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/kube/.ssh/id_ed25519.pub"
The authenticity of host 'ks-master-0 (192.168.9.91)' can't be established.
ED25519 key fingerprint is SHA256:XMc3FWjoTJY6TFH7BK3S6bRmLt+ZxoPvdUh9Dz3ENgk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
kube@ks-master-0's password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'kube@ks-master-0'"
and check to make sure that only the key(s) you wanted were added.

添加并上传 SSH 公钥后,您现在能够履行下面的指令验证,经过 kube 用户衔接到一切服务器,无需暗码验证。

kube@ks-master-0:~$ ssh kube@ks-master-1
# 登陆输出成果 略

装置体系依靠

在一切节点上,以 kube 用户登陆体系(非必需,其他体系用户也可),履行下面的指令为 Kubernetes 装置体系根本依靠包。

sudo apt-get update
sudo apt-get install curl socat conntrack ebtables ipset ipvsadm

装备服务器时区

装备服务器时区为 Asia/Shanghai

sudo timedatectl set-timezone Asia/Shanghai

装置 chrony 装备时刻同步

装置 chrony 作为时刻同步软件:

sudo apt-get install chrony

修正装备文件 /etc/chrony/chrony.conf,修正 ntp 服务器装备:

sudo vi /etc/chrony/chrony.conf
# 删去一切的 pool 装备
pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2

# 添加国内的 ntp 服务器,或是指定其他常用的时刻服务器
server ntp.api.bz iburst

重启 chrony 服务:

sudo systemctl restart chrony

验证 chrony 同步状况:

# 履行检查指令
sudo chronyc sourcestats -v

# 正常的输出成果如下
kube@ks-master-0:~/kubekey$ sudo chronyc sourcestats -v
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
185.53.177.52               0   0     0     +0.000   2000.000     +0ns  4000ms

装置布置 KubeSphere 和 Kubernetes

下载 KubeKey

本文将 master-0 节点作为布置节点,把 KubeKey (下文简称 kk) 最新版(3.0.7)二进制文件下载到该服务器。具体 KubeKey 版别号能够在 KubeKey 发行页面检查。

  • 下载最新版的 KubeKey
cd ~
mkdir kubekey
cd kubekey/
# 挑选中文区下载(拜访github受限时运用)
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -

# 也能够运用下面的指令指定具体版别
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -

# 正确的履行效果如下
kube@ks-master-0:~$ cd ~
kube@ks-master-0:~$ mkdir kubekey
kube@ks-master-0:~$ cd kubekey/
kube@ks-master-0:~/kubekey$ export KKZONE=cn
kube@ks-master-0:~/kubekey$ curl -sfL https://get-kk.kubesphere.io | sh -
Downloading kubekey v3.0.7 from https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.0.7/kubekey-v3.0.7-linux-amd64.tar.gz ...
Kubekey v3.0.7 Download Complete!
kube@ks-master-0:~/kubekey$ ll
total 111996
drwxrwxr-x 2 kube kube     4096 May 17 07:19 ./
drwxr-x--- 5 kube kube     4096 May 17 07:17 ../
-rwxr-xr-x 1 kube kube 78901793 Jan 18 01:59 kk*
-rw-rw-r-- 1 kube kube 35769576 May 17 07:19 kubekey-v3.0.7-linux-amd64.tar.gz
  • 检查 KubeKey 支持的 Kubernetes 版别列表
./kk version --show-supported-k8s

# 输出如下
kube@ks-master-0:~/kubekey$ ./kk version --show-supported-k8s
v1.19.0
v1.19.8
v1.19.9
v1.19.15
v1.20.4
v1.20.6
v1.20.10
v1.21.0
v1.21.1
v1.21.2
v1.21.3
v1.21.4
v1.21.5
v1.21.6
v1.21.7
v1.21.8
v1.21.9
v1.21.10
v1.21.11
v1.21.12
v1.21.13
v1.21.14
v1.22.0
v1.22.1
v1.22.2
v1.22.3
v1.22.4
v1.22.5
v1.22.6
v1.22.7
v1.22.8
v1.22.9
v1.22.10
v1.22.11
v1.22.12
v1.22.13
v1.22.14
v1.22.15
v1.22.16
v1.22.17
v1.23.0
v1.23.1
v1.23.2
v1.23.3
v1.23.4
v1.23.5
v1.23.6
v1.23.7
v1.23.8
v1.23.9
v1.23.10
v1.23.11
v1.23.12
v1.23.13
v1.23.14
v1.23.15
v1.24.0
v1.24.1
v1.24.2
v1.24.3
v1.24.4
v1.24.5
v1.24.6
v1.24.7
v1.24.8
v1.24.9
v1.25.0
v1.25.1
v1.25.2
v1.25.3
v1.25.4
v1.25.5
v1.26.0

创立 Kubernetes 和 KubeSphere 布置装备文件

创立集群装备文件,本示例中,挑选 KubeSphere v3.3.2 和 Kubernetes v1.25.5,一起,指定装备文件名称为 kubesphere-v3.3.2.yaml,如果不指定,默许的文件名为 config-sample.yaml

./kk create config -f kubesphere-v3.3.2.yaml --with-kubernetes v1.25.5 --with-kubesphere v3.3.2

指令履行成功后,在当时目录会生成文件名为 kubesphere-v3.3.2.yaml 的装备文件。

kube@ks-master-0:~/kubekey$ ./kk create config -f kubesphere-v3.3.2.yaml --with-kubernetes v1.25.5 --with-kubesphere v3.3.2
Generate KubeKey config file successfully
kube@ks-master-0:~/kubekey$ ls
kk  kubekey-v3.0.7-linux-amd64.tar.gz  kubesphere-v3.3.2.yaml

本示例选用 3 个节点作为 control-plane 节点一起复用为 worker 节点。

修正装备文件 kubesphere-v3.3.2.yaml,修正 hosts 和 roleGroups 等信息,修正说明如下。

  • hosts 指定节点的 IP、ssh 用户、ssh 暗码、ss h 密钥,示例演示了一起运用暗码和密钥的装备方法
  • roleGroups 指定 ks-master-0、ks-master-1、ks-master-2 作为 etcd、control-plane、worker 节点
  • internalLoadbalancer 启用内置的 HAProxy 负载均衡器

修正后的示例如下:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: ks-master-0, address: 192.168.9.91, internalAddress: 192.168.9.91, user: kube, password: "P@88w0rd"}
  - {name: ks-master-1, address: 192.168.9.92, internalAddress: 192.168.9.92, user: kube, privateKeyPath: "~/.ssh/id_ed25519"}
  - {name: ks-master-2, address: 192.168.9.93, internalAddress: 192.168.9.93, user: kube, privateKeyPath: "~/.ssh/id_ed25519"}
  roleGroups:
    etcd:
    - ks-master-0
    - ks-master-1
    - ks-master-2
    control-plane:
    - ks-master-0
    - ks-master-1
    - ks-master-2
    worker:
    - ks-master-0
    - ks-master-1
    - ks-master-2
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers
    internalLoadbalancer: haproxy
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.25.5
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: containerd
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []

布置 KubeSphere 和 Kubernetes

接下来咱们履行下面的指令,运用上面生成的装备文件布置 KubeSphere 和 Kubernetes。

./kk create cluster -f kubesphere-v3.3.2.yaml

上面的指令履行后,首先 kk 会检查布置 Kubernetes 的依靠及其他具体要求。检查合格后,体系将提示您承认装置。输入 yes 并按 ENTER 继续布置。

kube@ks-master-0:~/kubekey$ ./kk create cluster -f kubesphere-v3.3.2.yaml
 _   __      _          _   __
| | / /     | |        | | / /
| |/ / _   _| |__   ___| |/ /  ___ _   _
|    \| | | | '_ \ / _ \    \ / _ \ | | |
| |\  \ |_| | |_) |  __/ |\  \  __/ |_| |
\_| \_/\__,_|_.__/ \___\_| \_/\___|\__, |
                                    __/ |
                                   |___/
16:24:04 CST [GreetingsModule] Greetings
16:24:05 CST message: [ks-master-2]
Greetings, KubeKey!
16:24:06 CST message: [ks-master-0]
Greetings, KubeKey!
16:24:08 CST message: [ks-master-1]
Greetings, KubeKey!
16:24:08 CST success: [ks-master-2]
16:24:08 CST success: [ks-master-0]
16:24:08 CST success: [ks-master-1]
16:24:08 CST [NodePreCheckModule] A pre-check on nodes
16:24:08 CST success: [ks-master-0]
16:24:08 CST success: [ks-master-2]
16:24:08 CST success: [ks-master-1]
16:24:08 CST [ConfirmModule] Display confirmation form
+-------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| name        | sudo | curl | openssl | ebtables | socat | ipset | ipvsadm | conntrack | chrony | docker | containerd | nfs client | ceph client | glusterfs client | time         |
+-------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| ks-master-0 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        |            |            |             |                  | CST 16:24:08 |
| ks-master-1 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        |            |            |             |                  | CST 16:24:08 |
| ks-master-2 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        |            |            |             |                  | CST 16:24:08 |
+-------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
This is a simple check of your environment.
Before installation, ensure that your machines meet all requirements specified at
https://github.com/kubesphere/kubekey#requirements-and-recommendations
Continue this installation? [yes/no]:

布置完结需求大约 10-30 分钟左右,具体看网速和机器装备。

布置完结后,您应该会在终端上看到类似于下面的输出。提示布置完结的一起,输出中还会显现用户登陆 KubeSphere 的默许办理员用户和暗码。

clusterconfiguration.installer.kubesphere.io/ks-installer created
16:36:44 CST skipped: [ks-master-2]
16:36:44 CST skipped: [ks-master-1]
16:36:44 CST success: [ks-master-0]
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################
Console: http://192.168.9.91:30880
Account: admin
Password: P@88w0rd
NOTES:
  1. After you log into the console, please check the
     monitoring status of service components in
     "Cluster Management". If any service is not
     ready, please wait patiently until all components
     are up and running.
  2. Please change the default password after login.
#####################################################
https://kubesphere.io             2023-05-17 16:48:38
#####################################################
16:48:43 CST skipped: [ks-master-2]
16:48:43 CST skipped: [ks-master-1]
16:48:43 CST success: [ks-master-0]
16:48:43 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.
Please check the result using the command:
	kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

布置验证

  1. 验证 KubeSphere 办理控制台

咱们翻开浏览器拜访 master-0 节点的 Ip 地址和端口 “30880”,能够看到 KubeSphere 办理控制台的登录页面。

输入默许用户 admin 和默许暗码 P@88w0rd,然后点击「登录」。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

登录后,体系会要求您更改 KubeSphere 默许用户 admin 的默许暗码,输入新的暗码并点击「提交」。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

提交完结后,体系会跳转到 KubeSphere admin 用户作业台页面,该页面显现了当时 KubeSphere 版别为 v3.3.2,可用的 Kubernetes 集群数量为 1。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

接下来,单击左上角的「渠道办理」菜单,挑选「集群办理」。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

进入集群办理界面,在该页面能够检查集群的根本信息,包含集群资源用量、Kubernetes 状况、节点资源用量 Top、体系组件、工具箱等内容。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

单击左边「节点」菜单,点击「集群节点」能够检查 Kubernetes 集群可用节点的具体信息。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

单击左边「体系组件」菜单,能够检查已装置组件的具体信息。目前集群选用的最小化装置,仅包含 KubeSphere、Kubernetes、监控三个类别的组件。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

  1. 指令行验证集群信息

在 master-0 节点运转 kubectl 指令获取 Kubernetes 集群上的可用节点列表

kubectl get nodes

在输出成果中能够看到,当时的 Kubernetes 集群有三个可用节点、节点的内部 IP、节点角色、节点的 Kubernetes 版别号、容器运转时及版别号、操作体系类型及内核版别等信息。

kube@ks-master-0:~/kubekey$ kubectl get nodes -o wide
NAME          STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
ks-master-0   Ready    control-plane,worker   36m   v1.25.5   192.168.9.91   <none>        Ubuntu 22.04.2 LTS   5.15.0-70-generic   containerd://1.6.4
ks-master-1   Ready    control-plane,worker   35m   v1.25.5   192.168.9.92   <none>        Ubuntu 22.04.2 LTS   5.15.0-70-generic   containerd://1.6.4
ks-master-2   Ready    control-plane,worker   35m   v1.25.5   192.168.9.93   <none>        Ubuntu 22.04.2 LTS   5.15.0-70-generic   containerd://1.6.4

输入以下指令获取在 Kubernetes 集群上运转的 Pod 列表:

kubectl get pods --all-namespaces

在输出成果中能够看到, Kubernetes 集群上有多个可用的命名空间 kube-system、kubesphere-control-system、kubesphere-monitoring-system 和 kubesphere-system,一切 pod 都在运转。

kube@ks-master-0:~/kubekey$ kubectl get pods --all-namespaces
NAMESPACE                      NAME                                           READY   STATUS    RESTARTS   AGE
kube-system                    calico-kube-controllers-75c594996d-mfl2c       1/1     Running   0          37m
kube-system                    calico-node-2xhqh                              1/1     Running   0          37m
kube-system                    calico-node-6vcl9                              1/1     Running   0          37m
kube-system                    calico-node-l9p9s                              1/1     Running   0          37m
kube-system                    coredns-67ddbf998c-t2z87                       1/1     Running   0          38m
kube-system                    coredns-67ddbf998c-xff4b                       1/1     Running   0          38m
kube-system                    kube-apiserver-ks-master-0                     1/1     Running   0          38m
kube-system                    kube-apiserver-ks-master-1                     1/1     Running   0          37m
kube-system                    kube-apiserver-ks-master-2                     1/1     Running   0          37m
kube-system                    kube-controller-manager-ks-master-0            1/1     Running   0          38m
kube-system                    kube-controller-manager-ks-master-1            1/1     Running   0          37m
kube-system                    kube-controller-manager-ks-master-2            1/1     Running   0          37m
kube-system                    kube-proxy-czmpt                               1/1     Running   0          37m
kube-system                    kube-proxy-mddtt                               1/1     Running   0          37m
kube-system                    kube-proxy-vjdzl                               1/1     Running   0          37m
kube-system                    kube-scheduler-ks-master-0                     1/1     Running   0          38m
kube-system                    kube-scheduler-ks-master-1                     1/1     Running   0          37m
kube-system                    kube-scheduler-ks-master-2                     1/1     Running   0          37m
kube-system                    nodelocaldns-5zpnj                             1/1     Running   0          37m
kube-system                    nodelocaldns-8849d                             1/1     Running   0          38m
kube-system                    nodelocaldns-v97cd                             1/1     Running   0          37m
kube-system                    openebs-localpv-provisioner-57d95c6875-lwvqt   1/1     Running   0          37m
kube-system                    snapshot-controller-0                          1/1     Running   0          35m
kubesphere-controls-system     default-http-backend-5d5c44d77f-kst9l          1/1     Running   0          31m
kubesphere-controls-system     kubectl-admin-788ff75cd7-4wqtc                 1/1     Running   0          25m
kubesphere-monitoring-system   kube-state-metrics-6cc9478499-9fr7h            3/3     Running   0          28m
kubesphere-monitoring-system   node-exporter-dzqw5                            2/2     Running   0          28m
kubesphere-monitoring-system   node-exporter-f6wvj                            2/2     Running   0          28m
kubesphere-monitoring-system   node-exporter-kqtj8                            2/2     Running   0          28m
kubesphere-monitoring-system   prometheus-k8s-0                               2/2     Running   0          28m
kubesphere-monitoring-system   prometheus-k8s-1                               2/2     Running   0          28m
kubesphere-monitoring-system   prometheus-operator-6bd484db88-l6666           2/2     Running   0          28m
kubesphere-system              ks-apiserver-6797fc669-dr9gs                   1/1     Running   0          31m
kubesphere-system              ks-console-6f9d57b699-whg9w                    1/1     Running   0          31m
kubesphere-system              ks-controller-manager-6656d4f57d-gfc5x         1/1     Running   0          31m
kubesphere-system              ks-installer-55b8b4c4d9-9gvjh                  1/1     Running   0          37m

至此,咱们现已布置了具有三个 Ubuntu 服务器节点的最小化的 Kubernetes 集群和 KubeSphere。咱们还经过 KubeSphere 办理控制台和指令行界面检查了集群的状况。

接下来咱们将在 Kubernetes 集群上布置一个简略的 Nginx Web 服务器,测验验证 Kubernetes 和 KubeSphere 正常可用。

布置测验资源

本示例运用指令行工具在 Kubernetes 集群上布置一个 Nginx Web 服务器并使用 KubeSphere 图形化办理控制台检查布置的资源信息。

创立 Nginx Deployment

运转以下指令创立一个布置 Nginx Web 服务器的 Deployment。此示例中,咱们将创立具有两个副本根据 nginx:alpine 镜像的 Pod。

kubectl create deployment nginx --image=nginx:alpine --replicas=2

创立 Nginx Service

创立一个新的 Kubernetes 服务,服务名称 nginx,服务类型 Nodeport,对外的服务端口 80。

kubectl create service nodeport nginx --tcp=80:80

验证 Nginx Deployment 和 Pod

运转以下指令检查创立的 Deployment 和 Pod 资源。

kubectl get deployment -o wide
kubectl get pods -o wide

检查成果如下:

kube@ks-master-0:~$ kubectl get deployment -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx   2/2     2            2           72s   nginx        nginx:alpine   app=nginx
kube@ks-master-0:~$ kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP             NODE          NOMINATED NODE   READINESS GATES
nginx-55f494c486-85zsc   1/1     Running   0          78s   10.233.103.5   ks-master-1   <none>           <none>
nginx-55f494c486-hpzlr   1/1     Running   0          78s   10.233.102.7   ks-master-2   <none>           <none>

验证 Nginx Service

运转一下指令检查可用的服务列表,在列表中咱们能够看到 Nginx 服务类型 为 Nodeport,并在 Kubernetes 主机上开放了 32710 端口。

kubectl get svc -o wide

检查成果如下:

kube@ks-master-0:~$ kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE     SELECTOR
kubernetes   ClusterIP   10.233.0.1     <none>        443/TCP        16h     <none>
nginx        NodePort    10.233.10.40   <none>        80:32710/TCP   6m21s   app=nginx

拜访 Nginx 服务

运转以下指令拜访布置的 Nginx 服务,验证服务是否成功布置。

  • 验证直接拜访 Pod
curl 10.233.103.5

# 拜访成果如下
kube@ks-master-0:~$ curl 10.233.103.5
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  • 验证拜访 Service
curl 10.233.10.40

# 拜访成果同上,略
  • 验证拜访 Nodeport
curl 192.168.9.91:32710

# 拜访成果同上,略

在办理控制台检查

接下来咱们回到 KubeSphere 办理控制台,在办理控制台检查现已创立的资源。

说明: KubeSphere 的办理控制台具有友爱地、图形化创立 Kubernetes 各种资源的功能,主要是截图太麻烦了,所以本文选用了指令行的方法简略的创立了测验资源。

只是在检查的时候给咱们演示一下 KubeSphere 办理控制台的根本功能,实际运用中,咱们能够运用图形化方法创立和办理 Kubernetes 资源。

  • 登录 KubeSphere 办理控制台,点击「渠道办理」,挑选「集群办理」。
  • 单击集群办理页面左边的「使用负载」,点击「作业负载」。默许会看到一切类型为布置的作业负载。

咱们运用的是 admin 账户,因而能够看到一切的作业负载,在查找框输入 nginx,只显现 nginx 布置作业负载。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

  • 单击布置列表中的 nginx,能够检查更具体的信息,而且办理 nginx 布置(Deployment)。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

  • 回到「渠道办理」-「集群办理」页面,单击集群办理页面左边的「使用负载」,点击「服务」。默许会看到一切类型为服务的作业负载。

咱们运用的是 admin 账户,因而能够看到一切的作业负载,在查找框输入 nginx,只显现 nginx 服务作业负载。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

  • 单击服务列表中的 nginx,能够检查更具体的信息,而且办理 nginx 服务(Service)。

在 Ubuntu 22.04 上安装 KubeSphere 实战教程

至此,咱们实现了将 Nginx Web 服务器布置到 Kubernetes 集群,并经过 KubeSphere 办理控制台检查、验证了布置的 Deployment、Pod、Service 的具体信息。

常见问题

ssh 衔接报错

  • 报错信息
# ssh 服务器时报错如下
ssh: connect to host 192.168.9.91 port 22: Connection refused
  • 解决方案
# 问题原因 ubuntu 服务器默许装置后 openssh 服务发动失败, 需求履行如下指令后再发动 sshd 服务

# 切换到 root 用户
sudo -i

# 履行指令
ssh-keygen -A

# 发动 sshd 服务
systemctl start sshd

结束语

本文主要介绍了在三台 Ubuntu 22.04 服务器上使用 KubeKey 自动化布置 KubeSphere 和 Kubernetes 高可用集群的具体过程。

布置完结后,咱们还使用 KubeSphere 办理控制台和 kubectl 指令行,检查并验证了 KubeSphere 和 Kubernetes 集群的状况。

终究咱们经过在 Kubenetes 集群上布置 Nginx Web 服务器验证了 Kubernetes 集群和 KubeSphere 的可用性,并经过在 KubeSphere 办理控制台检查 Nginx Pod 和 服务状况的操作,了解了 KubeSphere 的根本用法。

本文由博客一文多发渠道 OpenWrite 发布!