일부 프로덕션 환경에서는 기본 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. 운영 체제 디스크 구성
서버는 Containerd 및 K8s 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 클러스터 배포 구성 파일 생성
- 클러스터 구성 파일 만들기
이 기사에서는 K8s v1.28.8을 선택했습니다 . 따라서 지정된 구성 파일 이름은 k8s-v1288.yaml 입니다 . 지정하지 않으면 기본 파일 이름은 config-sample.yaml 입니다 .
./kk create config -f k8s-v1288.yaml --with-kubernetes v1.28.8
참고: 생성된 기본 구성 파일에는 내용이 많기 때문에 여기서는 자세히 표시하지 않습니다. 자세한 구성 매개변수는 공식 구성 예 를 참조하세요 .
- 구성 파일 수정
이 문서의 예에서는 세 개의 노드를 제어 평면, 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 클러스터 배포 완료 후 검증 테스트
부인 성명:
- 작성자의 수준에는 한계가 있습니다. 많은 검증과 검토를 거쳐 내용의 정확성을 보장하기 위해 최선을 다했지만 여전히 누락된 부분이 있을 수 있습니다 . 업계 전문가들의 조언을 자유롭게 부탁드립니다.
- 본 글에 기술된 내용은 실제 전투 환경에서만 검증 및 테스트된 내용이므로 독자는 이를 통해 학습하고 학습할 수 있으나, 프로덕션 환경에서 직접 사용하는 것은 엄격히 금지됩니다 . 이로 인해 발생하는 문제에 대해서는 작성자는 책임을 지지 않습니다 !
러스트데스크(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 휴대폰을 지원합니다.이 기사는 여러 기사를 게시하는 블로그인 OpenWrite 에서 게시되었습니다 !