KubeKey는 실제로 K8s v1.28.8을 배포합니다.

일부 프로덕션 환경에서는 기본 K8s 클러스터만 필요하며 KubeSphere 와 같은 그래픽 관리 콘솔을 배포할 필요가 없습니다 . 기존 기술 스택에서는 KubeKey를 사용하여 KubeSphere 및 K8s 클러스터를 배포하는 데 익숙합니다 . 오늘은 openEuler 22.03 LTS SP3 에서 KubeKey를 사용하여 순수 K8s 클러스터를 배포하는 방법을 보여 드리겠습니다 .

실제 서버 구성 (소규모 프로덕션 환경의 아키텍처 1:1 복제본, 구성이 약간 다름)

CPU 이름 IP CPU 메모리 시스템 디스크 데이터 디스크 사용
ksp-마스터-1 192.168.9.131 8 16 40 100 k8s-마스터
ksp-마스터-2 192.168.9.132 8 16 40 100 k8s-마스터
ksp-마스터-3 192.168.9.133 8 16 40 100 k8s-마스터
24 48 120 300

실제 전투 환경에는 소프트웨어 버전 정보가 포함됩니다.

  • 운영 체제: openEuler 22.03 LTS SP3 x64

  • K8s: v1.28.8

  • 컨테이너d: 1.7.13

  • KubeKey: v3.1.1

1. 운영체제 기본 구성

별도로 지정하지 않는 한 다음 작업은 모든 서버에서 수행되어야 합니다. 본 글에서는 시연을 위해 Master-1 노드만 선택했으며, 다른 서버도 동일한 방식으로 구성 및 설정되었다고 가정합니다.

1.1 호스트 이름 구성

hostnamectl hostname ksp-master-1

1.2 DNS 구성

echo "nameserver 114.114.114.114" > /etc/resolv.conf

1.3 서버 시간대 구성

  • 서버 시간대를 Asia/Shanghai 로 구성합니다 .
timedatectl set-timezone Asia/Shanghai

1.4 시간 동기화 구성

  • 시간 동기화 소프트웨어로 chrony 설치
yum install chrony 
  • 구성 파일을 편집 /etc/chrony.conf하고 ntp 서버 구성을 수정합니다.
vi /etc/chrony.conf

# 删除所有的 pool 配置
pool pool.ntp.org iburst

# 增加国内的 ntp 服务器,或是指定其他常用的时间服务器
pool cn.pool.ntp.org iburst

# 上面的手工操作,也可以使用 sed 自动替换
sed -i 's/^pool pool.*/pool cn.pool.ntp.org iburst/g' /etc/chrony.conf
  • 부팅 시 자동으로 시작되도록 chrony 서비스를 다시 시작하고 설정합니다.
systemctl enable chronyd --now
  • 크로니 동기화 상태 확인
# 执行查看命令
chronyc sourcestats -v

# 正常的输出结果如下
[root@ksp-master-1 ~]# 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
==============================================================================
111.230.189.174            18  11   977     -0.693      6.795  -1201us  2207us
electrode.felixc.at        18  10   917     +2.884      8.258    -31ms  2532us
tick.ntp.infomaniak.ch     14   7   720     +2.538     23.906  +6176us  4711us
time.cloudflare.com        18   7   913     +0.633      9.026  -2543us  3142us

1.5 시스템 방화벽 끄기

systemctl stop firewalld && systemctl disable firewalld

1.6 SELinux 비활성화

openEuler 22.03 SP3의 최소 설치 시스템에는 기본적으로 SELinux가 활성화되어 있습니다. 문제를 줄이기 위해 모든 노드는 SELinux를 비활성화합니다.

# 使用 sed 修改配置文件,实现彻底的禁用
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 使用命令,实现临时禁用,这一步其实不做也行,KubeKey 会自动配置
setenforce 0

1.7 시스템 종속성 설치

모든 노드에서 다음 명령을 실행하여 Kubernetes용 기본 시스템 종속성 패키지를 설치합니다.

# 安装 Kubernetes 系统依赖包
yum install curl socat conntrack ebtables ipset ipvsadm

# 安装 tar 包,不装的话后面会报错。openEuler 也是个奇葩,迭代这么多版本了,默认居然还不安装 tar
yum install tar

2. 운영 체제 디스크 구성

서버는 ContainerdK8s Pod 의 영구 저장을 위해 새 데이터 디스크 /dev/sdb를 추가합니다.

일부 사용자의 요구를 충족시키기 위해 생산이 온라인으로 전환된 후 디스크 용량이 부족한 경우 동적 확장을 달성할 수 있습니다. 이 기사에서는 LVM을 사용하여 디스크를 구성합니다( 사실 제가 유지 관리하는 프로덕션 환경에서는 LVM을 거의 사용하지 않습니다 ).

별도로 지정하지 않는 한 클러스터의 모든 노드에서 다음 작업을 수행해야 합니다. 본 글에서는 시연을 위해 Master-1 노드만 선택했으며, 다른 서버도 동일한 방식으로 구성 및 설정되었다고 가정합니다.

2.1 LVM을 사용하여 디스크 구성

  • PV 생성
 pvcreate /dev/sdb
  • CreateVG
vgcreate data /dev/sdb
  • LV 생성
# 使用所有空间,VG 名字为 data,LV 名字为 lvdata
lvcreate -l 100%VG data -n lvdata

2.2 디스크 포맷

mkfs.xfs /dev/mapper/data-lvdata

2.3 디스크 마운팅

  • 수동 장착
mkdir /data
mount /dev/mapper/data-lvdata /data/
  • 부팅 시 자동으로 마운트
tail -1 /etc/mtab >> /etc/fstab

2.4 데이터 디렉토리 생성

  • OpenEBS 로컬 데이터 루트 디렉터리 생성
mkdir -p /data/openebs/local
  • Containerd 데이터 디렉터리 만들기
mkdir -p /data/containerd
  • Containerd 데이터 디렉터리에 대한 소프트 연결 만들기
ln -s /data/containerd /var/lib/containerd

참고: 버전 v3.1.1까지 KubeKey는 배포 중에 Containerd의 데이터 디렉터리 변경을 지원하지 않았습니다. 이 디렉터리 소프트 링크를 사용하면 저장 공간을 늘릴 수 있습니다( Containerd를 미리 수동으로 설치할 수도 있음 ).

3. K8 설치 및 배포

3.1 KubeKey 다운로드

이 문서에서는 master-1 노드를 배포 노드로 사용하고 최신 버전의 KubeKey( v3.1.1 ) 바이너리 파일을 서버에 다운로드합니다. 특정 KubeKey 버전 번호는 KubeKey 릴리스 페이지 에서 확인할 수 있습니다 .

  • KubeKey 최신 버전을 다운로드하세요.
mkdir ~/kubekey
cd ~/kubekey/

# 选择中文区下载(访问 GitHub 受限时使用)
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -
  • 올바른 실행 결과는 다음과 같습니다
[root@ksp-master-1 ~]# mkdir ~/kubekey
[root@ksp-master-1 ~]# cd ~/kubekey/
[root@ksp-master-1 kubekey]# export KKZONE=cn
[root@ksp-master-1 kubekey]# curl -sfL https://get-kk.kubesphere.io | sh -

Downloading kubekey v3.1.1 from https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.1.1/kubekey-v3.1.1-linux-amd64.tar.gz ...


Kubekey v3.1.1 Download Complete!

[root@ksp-master-1 kubekey]# ll -h
total 114M
-rwxr-xr-x. 1 root root 79M Apr 16 12:30 kk
-rw-r--r--. 1 root root 36M Apr 25 09:37 kubekey-v3.1.1-linux-amd64.tar.gz
  • KubeKey에서 지원하는 Kubernetes 버전 목록 보기./kk version --show-supported-k8s
[root@ksp-master-1 kubekey]# ./kk version --show-supported-k8s
v1.19.0
......(受限于篇幅,中间的不展示,请读者根据需求查看)
v1.28.0
v1.28.1
v1.28.2
v1.28.3
v1.28.4
v1.28.5
v1.28.6
v1.28.7
v1.28.8
v1.29.0
v1.29.1
v1.29.2
v1.29.3

참고: 출력 결과는 KubeKey에서 지원하는 결과이지만 KubeSphere 및 기타 K8도 완벽하게 지원할 수 있다는 의미는 아닙니다. 이 기사에서는 KubeKey만 사용하여 K8s를 배포하므로 버전 호환성을 고려할 필요가 없습니다.

KubeKey가 지원하는 K8s 버전은 여전히 ​​비교적 새로운 버전입니다. 이 문서 에서는 v1.28.8을 선택합니다 . 프로덕션 환경의 경우 v1.26.15 또는 짝수의 마이너 버전과 5개 이상의 패치 버전이 있는 다른 버전을 선택할 수 있습니다 . 결국 v1.30이 출시되었기 때문에 너무 오래된 버전을 선택하는 것은 권장되지 않습니다.

3.2 K8s 클러스터 배포 구성 파일 생성

  1. 클러스터 구성 파일 만들기

이 기사에서는 K8s v1.28.8을 선택했습니다 . 따라서 지정된 구성 파일 이름은 k8s-v1288.yaml 입니다 . 지정하지 않으면 기본 파일 이름은 config-sample.yaml 입니다 .

./kk create config -f k8s-v1288.yaml --with-kubernetes v1.28.8

참고: 생성된 기본 구성 파일에는 내용이 많기 때문에 여기서는 자세히 표시하지 않습니다. 자세한 구성 매개변수는 공식 구성 예 를 참조하세요 .

  1. 구성 파일 수정

이 문서의 예에서는 세 개의 노드를 제어 평면, etcd 및 작업자 노드로 동시에 사용합니다.

구성 파일을 편집하고 k8s-v1288.yaml주로 종류 의 관련 구성을 수정합니다. 클러스터 섹션

종류: 클러스터 섹션 에서 호스트 및 roleGroups 정보를 수정합니다 . 수정 지침은 다음과 같습니다.

  • 호스트: 노드의 IP, SSH 사용자, SSH 비밀번호, SSH 포트를 지정합니다.
  • roleGroups: etcd 및 제어 영역 노드 3개를 지정하고 동일한 머신을 작업자 노드 3개로 재사용합니다.
  • InternalLoadbalancer: 내장 HAProxy 로드 밸런서를 활성화합니다.
  • 도메인: 사용자 지정 도메인 이름 lb.opsxlab.cn 특별한 요구 사항이 없으면 기본값 lb.kubesphere.local을 사용할 수 있습니다.
  • ClusterName: opsxlab.cn을 사용자 정의합니다 . 특별한 요구 사항이 없으면 기본값인 Cluster.local을 사용할 수 있습니다.
  • autoRenewCerts: 이 매개변수는 인증서 만료의 자동 갱신을 실현할 수 있으며 기본값은 true 입니다.
  • 컨테이너 관리자: 컨테이너 사용

수정된 전체 예는 다음과 같습니다.

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: ksp-master-1, address: 192.168.9.131, internalAddress: 192.168.9.131, user: root, password: "OpsXlab@2024"}
  - {name: ksp-master-2, address: 192.168.9.132, internalAddress: 192.168.9.132, user: root, password: "OpsXlab@2024"}
  - {name: ksp-master-3, address: 192.168.9.133, internalAddress: 192.168.9.133, user: root, password: "OpsXlab@2024"}
  roleGroups:
    etcd:
    - ksp-master-1
    - ksp-master-2
    - ksp-master-3
    control-plane:
    - ksp-master-1
    - ksp-master-2
    - ksp-master-3
    worker:
    - ksp-master-1
    - ksp-master-2
    - ksp-master-3
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers
    internalLoadbalancer: haproxy

    domain: lb.opsxlab.cn
    address: ""
    port: 6443
  kubernetes:
    version: v1.28.8
    clusterName: opsxlab.cn
    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: []

3.3 K8 배포

다음으로 위에서 생성된 구성 파일을 사용하여 다음 명령을 실행하여 K8s를 배포합니다.

export KKZONE=cn
./kk create cluster -f k8s-v1288.yaml

위 명령이 실행된 후 KubeKey는 먼저 K8 배포에 대한 종속성과 기타 세부 요구 사항을 확인합니다. 검사를 통과하면 설치를 확인하라는 메시지가 표시됩니다. 배포를 계속하려면 yes를 입력 하고 Enter 키를 누르세요.

[root@ksp-master-1 kubekey]# ./kk create cluster -f k8s-v1288.yaml


 _   __      _          _   __
| | / /     | |        | | / /
| |/ / _   _| |__   ___| |/ /  ___ _   _
|    \| | | | '_ \ / _ \    \ / _ \ | | |
| |\  \ |_| | |_) |  __/ |\  \  __/ |_| |
\_| \_/\__,_|_.__/ \___\_| \_/\___|\__, |
                                    __/ |
                                   |___/

10:45:28 CST [GreetingsModule] Greetings
10:45:28 CST message: [ksp-master-3]
Greetings, KubeKey!
10:45:28 CST message: [ksp-master-1]
Greetings, KubeKey!
10:45:28 CST message: [ksp-master-2]
Greetings, KubeKey!
10:45:28 CST success: [ksp-master-3]
10:45:28 CST success: [ksp-master-1]
10:45:28 CST success: [ksp-master-2]
10:45:28 CST [NodePreCheckModule] A pre-check on nodes
10:45:31 CST success: [ksp-master-3]
10:45:31 CST success: [ksp-master-1]
10:45:31 CST success: [ksp-master-2]
10:45:31 CST [ConfirmModule] Display confirmation form
+--------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| name         | sudo | curl | openssl | ebtables | socat | ipset | ipvsadm | conntrack | chrony | docker | containerd | nfs client | ceph client | glusterfs client | time         |
+--------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| ksp-master-1 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        |            |            |             |                  | CST 10:45:31 |
| ksp-master-2 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        |            |            |             |                  | CST 10:45:31 |
| ksp-master-3 | y    | y    | y       | y        | y     | y     | y       | y         | y      |        |            |            |             |                  | CST 10:45:31 |
+--------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+

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]:

알아채다:

  • 스토리지 관련 클라이언트 세 개(nfs 클라이언트, ceph 클라이언트, glusterfs 클라이언트)는 추후 실제 도킹 스토리지 구현 시 별도로 설치해 드리도록 하겠습니다.
  • docker 및 컨테이너d는 구성 파일에서 선택한 컨테이너 관리자 유형에 따라 자동으로 설치됩니다 .

배포를 완료하는 데 약 10~20분이 소요됩니다. 네트워크 속도와 시스템 구성에 따라 다릅니다. 이 배포를 완료하는 데는 20분이 소요됩니다.

배포가 완료되면 터미널에 다음과 유사한 출력이 표시됩니다.

10:59:25 CST [ConfigureKubernetesModule] Configure kubernetes
10:59:25 CST success: [ksp-master-1]
10:59:25 CST skipped: [ksp-master-2]
10:59:25 CST skipped: [ksp-master-3]
10:59:25 CST [ChownModule] Chown user $HOME/.kube dir
10:59:26 CST success: [ksp-master-3]
10:59:26 CST success: [ksp-master-2]
10:59:26 CST success: [ksp-master-1]
10:59:26 CST [AutoRenewCertsModule] Generate k8s certs renew script
10:59:27 CST success: [ksp-master-2]
10:59:27 CST success: [ksp-master-3]
10:59:27 CST success: [ksp-master-1]
10:59:27 CST [AutoRenewCertsModule] Generate k8s certs renew service
10:59:28 CST success: [ksp-master-3]
10:59:28 CST success: [ksp-master-2]
10:59:28 CST success: [ksp-master-1]
10:59:28 CST [AutoRenewCertsModule] Generate k8s certs renew timer
10:59:29 CST success: [ksp-master-2]
10:59:29 CST success: [ksp-master-3]
10:59:29 CST success: [ksp-master-1]
10:59:29 CST [AutoRenewCertsModule] Enable k8s certs renew service
10:59:29 CST success: [ksp-master-3]
10:59:29 CST success: [ksp-master-2]
10:59:29 CST success: [ksp-master-1]
10:59:29 CST [SaveKubeConfigModule] Save kube config as a configmap
10:59:29 CST success: [LocalHost]
10:59:29 CST [AddonsModule] Install addons
10:59:29 CST success: [LocalHost]
10:59:29 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.

Please check the result using the command:

        kubectl get pod -A

4. K8s 클러스터 확인

4.1 클러스터 상태를 확인하기 위한 kubectl 명령줄

이 섹션에서는 기본 상태만 간략하게 살펴보며, 자세한 내용은 직접 경험해 볼 수 있습니다.

  • 클러스터 노드 정보 보기

master-1 노드에서 kubectl 명령을 실행하여 K8s 클러스터에서 사용 가능한 노드 목록을 가져옵니다.

kubectl get nodes -o wide

출력에서 볼 수 있듯이 현재 K8s 클러스터에는 3개의 사용 가능한 노드, 즉 노드의 내부 IP, 노드 역할, 노드의 K8s 버전 번호, 컨테이너 런타임 및 버전 번호, 운영 체제 유형, 커널 버전 및 기타 정보가 있습니다.

[root@ksp-master-1 kubekey]# kubectl get nodes -o wide
NAME           STATUS   ROLES                  AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                    KERNEL-VERSION                       CONTAINER-RUNTIME
ksp-master-1   Ready    control-plane,worker   9m43s   v1.28.8   192.168.9.131   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-master-2   Ready    control-plane,worker   8m8s    v1.28.8   192.168.9.132   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
ksp-master-3   Ready    control-plane,worker   8m9s    v1.28.8   192.168.9.133   <none>        openEuler 22.03 (LTS-SP3)   5.10.0-182.0.0.95.oe2203sp3.x86_64   containerd://1.7.13
  • 포드 목록 보기

K8s 클러스터에서 실행 중인 Pod 목록을 가져오려면 다음 명령어를 입력하세요.

kubectl get pods -o wide -A

출력에서 볼 수 있듯이 모든 포드가 실행 중입니다.

[root@ksp-master-1 kubekey]# kubectl get pod -A -o wide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE     IP              NODE        
kube-system   calico-kube-controllers-64f6cb8db5-fsgnq   1/1     Running   0          4m59s   10.233.84.2     ksp-master-1           
kube-system   calico-node-5hkm4                          1/1     Running   0          4m59s   192.168.9.133   ksp-master-3          
kube-system   calico-node-wqz9s                          1/1     Running   0          4m59s   192.168.9.132   ksp-master-2
kube-system   calico-node-zzr5n                          1/1     Running   0          4m59s   192.168.9.131   ksp-master-1
kube-system   coredns-76dd97cd74-66k8z                   1/1     Running   0          6m22s   10.233.84.1     ksp-master-1
kube-system   coredns-76dd97cd74-94kvl                   1/1     Running   0          6m22s   10.233.84.3     ksp-master-1
kube-system   kube-apiserver-ksp-master-1                1/1     Running   0          6m39s   192.168.9.131   ksp-master-1
kube-system   kube-apiserver-ksp-master-2                1/1     Running   0          4m52s   192.168.9.132   ksp-master-2
kube-system   kube-apiserver-ksp-master-3                1/1     Running   0          5m9s    192.168.9.133   ksp-master-3
kube-system   kube-controller-manager-ksp-master-1       1/1     Running   0          6m39s   192.168.9.131   ksp-master-1
kube-system   kube-controller-manager-ksp-master-2       1/1     Running   0          4m58s   192.168.9.132   ksp-master-2
kube-system   kube-controller-manager-ksp-master-3       1/1     Running   0          5m5s    192.168.9.133   ksp-master-3
kube-system   kube-proxy-2xpq4                           1/1     Running   0          5m3s    192.168.9.131   ksp-master-1
kube-system   kube-proxy-9frmd                           1/1     Running   0          5m3s    192.168.9.133   ksp-master-3
kube-system   kube-proxy-bhg2k                           1/1     Running   0          5m3s    192.168.9.132   ksp-master-2
kube-system   kube-scheduler-ksp-master-1                1/1     Running   0          6m39s   192.168.9.131   ksp-master-1
kube-system   kube-scheduler-ksp-master-2                1/1     Running   0          4m59s   192.168.9.132   ksp-master-2
kube-system   kube-scheduler-ksp-master-3                1/1     Running   0          5m5s    192.168.9.133   ksp-master-3
kube-system   nodelocaldns-gl6dc                         1/1     Running   0          6m22s   192.168.9.131   ksp-master-1
kube-system   nodelocaldns-q45jf                         1/1     Running   0          5m9s    192.168.9.133   ksp-master-3
kube-system   nodelocaldns-rskk5                         1/1     Running   0          5m8s    192.168.9.132   ksp-master-2
  • 이미지 목록 보기

K8s 클러스터 노드에 다운로드된 이미지 목록을 얻으려면 다음 명령을 입력하십시오.

[root@ksp-master-1 kubekey]# crictl images ls
IMAGE                                                                   TAG                 IMAGE ID            SIZE
registry.cn-beijing.aliyuncs.com/kubesphereio/cni                       v3.27.3             6527a35581401       88.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/coredns                   1.9.3               5185b96f0becf       14.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/k8s-dns-node-cache        1.22.20             ff71cd4ea5ae5       30.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-apiserver            v1.28.8             e70a71eaa5605       34.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controller-manager   v1.28.8             e5ae3e4dc6566       33.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controllers          v3.27.3             3e4fd05c0c1c0       33.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-proxy                v1.28.8             5ce97277076c6       28.1MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-scheduler            v1.28.8             ad3260645145d       18.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node                      v3.27.3             5c6ffd2b2a1d0       116MB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause                     3.9                 e6f1816883972       321kB

지금까지 우리는 3개의 마스터 노드와 작업자 노드를 재사용하여 최소 K8s 클러스터 배포를 완료했습니다.

다음으로 K8s 클러스터에 간단한 Nginx 웹 서버를 배포하여 K8s 클러스터가 정상인지 테스트하고 확인하겠습니다.

5. 테스트 리소스 배포

이 예에서는 명령줄 도구를 사용하여 K8s 클러스터에 Nginx 웹 서버를 배포합니다.

5.1 Nginx 배포 생성

다음 명령을 실행하여 Nginx 웹 서버를 배포하는 배포를 생성합니다. 이 예에서는 nginx:alpine 이미지를 기반으로 두 개의 복제본이 있는 Pod를 생성합니다.

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

5.2 Nginx 서비스 생성

서비스 이름 nginx, 서비스 유형 Nodeport 및 외부 서비스 포트 80을 사용하여 새 K8s 서비스를 만듭니다.

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

5.3 Nginx 배포 및 Pod 확인

  • 생성된 배포 및 Pod 리소스를 보려면 다음 명령어를 실행하세요.
kubectl get deployment -o wide
kubectl get pods -o wide
  • 다음과 같이 결과를 봅니다.
[root@ksp-master-1 kubekey]# kubectl get deployment -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx   2/2     2            2           20s   nginx        nginx:alpine   app=nginx

[root@ksp-master-1 kubekey]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
nginx-6c557cc74d-tbw9c   1/1     Running   0          23s   10.233.102.187   ksp-master-2   <none>           <none>
nginx-6c557cc74d-xzzss   1/1     Running   0          23s   10.233.103.148   ksp-master-1   <none>           <none>

5.4 Nginx 서비스 확인

다음 명령을 실행하여 사용 가능한 서비스 목록을 보면 nginx 서비스 유형이 Nodeport이고 포트 30619 가 Kubernetes 호스트에 열려 있는 것을 볼 수 있습니다.

kubectl get svc -o wide

다음과 같이 결과를 봅니다.

[root@ksp-master-1 kubekey]# kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE     SELECTOR
kubernetes   ClusterIP   10.233.0.1     <none>        443/TCP        4d22h   <none>
nginx        NodePort    10.233.14.48   <none>        80:30619/TCP   5s      app=nginx

5.5 검증 서비스

다음 명령을 실행하여 배포된 Nginx 서비스에 액세스하고 서비스가 성공적으로 배포되었는지 확인합니다.

  • Pod에 대한 직접 액세스 확인
curl 10.233.102.187

# 访问结果如下
[root@ks-master-1 ~]# curl 10.233.102.187
<!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>
  • 서비스에 대한 액세스 확인
curl 10.233.14.48

# 访问结果同上,略
  • Nodeport에 대한 액세스 확인
curl 192.168.9.131:30619

# 访问结果同上,略

6. 자동화된 쉘 스크립트

기사의 모든 단계는 자동화된 스크립트로 컴파일되었으며 공간 제한으로 인해 이 문서에는 표시되지 않습니다.

7. 요약

이 문서 에서는 openEuler 22.03 LTS SP3 운영 체제에서 KubeSphere가 개발한 도구인 KubeKey 를 사용하여 K8s v1.28.8 클러스터를 배포하기 위한 자세한 프로세스와 주의 사항을 공유합니다.

주요 내용을 요약하면 다음과 같습니다.

  • openEuler 22.03 LTS SP3 운영 체제 기본 구성
  • openEuler 22.03 LTS SP3 운영 체제의 LVM 디스크 생성 구성
  • KubeKey를 사용하여 K8s 고가용성 클러스터 배포
  • K8s 클러스터 배포 완료 후 검증 테스트

부인 성명:

  • 작성자의 수준에는 한계가 있습니다. 많은 검증과 검토를 거쳐 내용의 정확성을 보장하기 위해 최선을 다했지만 여전히 누락된 부분이 있을 수 있습니다 . 업계 전문가들의 조언을 자유롭게 부탁드립니다.
  • 본 글에 기술된 내용은 실제 전투 환경에서만 검증 및 테스트된 내용이므로 독자는 이를 통해 학습하고 학습할 수 있으나, 프로덕션 환경에서 직접 사용하는 것은 엄격히 금지됩니다 . 이로 인해 발생하는 문제에 대해서는 작성자는 책임을 지지 않습니다 !

이 기사는 여러 기사를 게시하는 블로그인 OpenWrite 에서 게시되었습니다 !

러스트데스크(RustDesk) 만연한 사기로 국내 서비스 중단 애플 M4 칩 출시 타오바오(taobao.com) 웹 버전 최적화 작업 재개 고등학생들이 성인 선물로 자신만의 오픈소스 프로그래밍 언어 개발 - 네티즌 비판 댓글: 국방 Yunfeng은 Alibaba에서 사임하고 향후 Windows 플랫폼에서 독립 게임 프로그래머를 위한 대상을 . Visual Studio Code 1.89는 Java 17을 출시합니다. 가장 일반적으로 사용되는 Java LTS 버전은 Windows 10의 시장 점유율이 70입니다 . %, Windows 11은 계속해서 하락하고 있습니다. Google은 Hongmeng의 인수를 지원하고 Docker는 Android 휴대폰을 지원합니다.
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/4197945/blog/11105906