랜처 2.7.0 애플리케이션
제로, 전제 조건
0.1 커널 라우팅 및 전달 구성
# vim /etc/sysctl.conf
# cat /etc/sysctl.conf
...
net.ipv4.ip_forward=1
# sysctl -p
net.ipv4.ip_forward = 1
0.2 docker-ce 설치
모든 호스트에 docker-ce 설치
# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum -y install docker-ce
# systemctl enable --now docker
0.3 목장주 배포
# mkdir -p /opt/data/rancher_data
# docker run -d --privileged -p 80:80 -p 443:443 -v /opt/data/rancher_data:/var/lib/rancher --restart=always --name rancher-2-7-0 rancher/rancher:v2.7.0
1. 랜처 초기 구성
2. 클러스터 생성
기존 클러스터를 가져옵니다. 이번에 가져온 클러스터 버전은 k8s 1.25.2입니다.
모든 kubernetes 클러스터에 대한 범용 가져오기를 선택합니다.
가져온 클러스터에 이름 추가
가져온 클러스터에 라벨 추가
기존 클러스터를 rancher에 등록
복사 후 k8s 클러스터의 마스터 노드에서 해당 명령을 실행합니다.
[root@k8s-master01 ~]# curl --insecure -sfL https://192.168.10.163/v3/import/pg977t2z59g872brkj75qmxtkgkz8x5lrwwpdhkprvmcjhhr7tp6wm_c-m-p7wrqk4w.yaml | kubectl apply -f -
실행 후 4개의 네임스페이스가 추가되었는지 확인
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
calico-apiserver Active 36h
calico-system Active 36h
cattle-fleet-system Active 60s 新添加
cattle-impersonation-system Active 77s 新添加
cattle-system Active 81s 新添加
default Active 36h
kube-node-lease Active 36h
kube-public Active 36h
kube-system Active 36h
local Active 27s 新添加
tigera-operator Active 36h
모든 실행이 완료되면 모든 k8s 클러스터 노드가 rancher에 등록된 것을 확인할 수 있습니다.
3. 애플리케이션 출시
애플리케이션이 게시된 클러스터를 선택하세요.
3.1 Nginx 애플리케이션 배포
애플리케이션을 게시하기 전에 프로젝트/네임스페이스를 생성하세요.
프로젝트/네임스페이스가 생성된 후 워크로드 생성을 선택합니다(배포 유형).
애플리케이션 게시를 위한 네임스페이스, 애플리케이션 이름 및 복사본 수를 지정합니다.
포드 라벨 지정
애플리케이션에서 사용하는 이미지 및 컨테이너 유형 지정(표준 컨테이너)
애플리케이션 게시를 위한 포트 추가, 즉 해당 서비스 생성
위의 모든 구성이 완료되면 생성을 클릭합니다.
생성된 애플리케이션 관찰
실제 머신에서 생성된 애플리케이션에 액세스
3.2 MySQL 애플리케이션 배포
k8s 클러스터의 기존 스토리지 클래스 보기
영구 동적 저장소 클래스를 미리 준비해야 합니다.
[root@k8s-master01 ~]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client (default) fuseim.pri/ifs Delete Immediate false 15h
목장주 UI 인터페이스에서 보기
mysql을 게시하기 전에 프로젝트/네임스페이스를 만듭니다.
PVC 생성
서비스 생성
이 선택기에 주의하세요. 지금 생성하세요. MySQL 애플리케이션을 생성할 때 Pod 라벨이 이와 일치해야 합니다.
생성된 SVC 확인
[root@k8s-master01 ~]# kubectl get svc -n mydata1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysqldata1 ClusterIP None <none> 3306/TCP 49s
SVC에 해당하는 IP 주소를 구문 분석합니다.
Headless SVC를 사용하므로 SVC에서는 ClusterIP를 할당하지 않으므로 결과가 없습니다.
[root@k8s-master01 ~]# dig -t a mysqldata1.mydata1.svc.cluster.local @10.96.0.10
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t a mysqldata1.mydata1.svc.cluster.local @10.96.0.10
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 18405
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mysqldata1.mydata1.svc.cluster.local. IN A
;; AUTHORITY SECTION:
cluster.local. 30 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1664333089 7200 1800 86400 30
;; Query time: 0 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: 三 9月 28 10:47:03 CST 2022
;; MSG SIZE rcvd: 158
Statefulset 유형 애플리케이션 생성
해당 이름을 선택하여 입력하세요. 서비스 이름은 미리 생성된 서비스입니다.
MySQL 컨테이너 이미지 선택
환경 변수 추가
환경 변수를 통해 MySQL 관리자 비밀번호를 설정하고 이를 MySQL 데이터베이스에 추가합니다.
Pod 라벨은 생성된 SVC의 선택기가 사용하는 라벨과 일치해야 합니다.
MySQL은 데이터를 지속적으로 저장해야 하기 때문에 스토리지를 선택해야 하는데, 이번에는 앞서 생성한 PVC를 사용한다.
이전에 생성한 PVC를 MySQL 컨테이너의 /var/lib/mysql 디렉터리에 마운트합니다.
애플리케이션 릴리스 관찰
명령을 실행하여 애플리케이션을 사용할 수 있는지 확인하십시오.
3.3 WordPress 애플리케이션 배포
프로젝트/네임스페이스 생성
네임스페이스 생성 상태 관찰
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
calico-apiserver Active 37h
calico-system Active 37h
cattle-fleet-system Active 59m
cattle-impersonation-system Active 59m
cattle-system Active 59m
default Active 37h
kube-node-lease Active 37h
kube-public Active 37h
kube-system Active 37h
local Active 58m
mydata1 Active 34m
nginxweb Active 50m
tigera-operator Active 37h
webpp1 Active 34s 新添加命名空间
배포에 해당하는 애플리케이션 게시
배포 컨트롤러 유형 선택
애플리케이션에서 사용하는 포트를 추가하고 이번에는 노드 포트를 사용하여 게시합니다.
애플리케이션에 필요한 환경변수를 구성하고 환경변수를 통해 데이터베이스에 연결
환경 변수 정의를 위한 데이터베이스 도메인 이름 구문 분석
[root@k8s-master01 ~]# dig -t a mysqldata1-0.mysqldata1.mydata1.svc.cluster.local. @10.96.0.10
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t a mysqldata1-0.mysqldata1.mydata1.svc.cluster.local. @10.96.0.10
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38690
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mysqldata1-0.mysqldata1.mydata1.svc.cluster.local. IN A
;; ANSWER SECTION:
mysqldata1-0.mysqldata1.mydata1.svc.cluster.local. 30 IN A 10.224.69.203 解析出来Pod IP地址
;; Query time: 0 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: 三 9月 28 11:32:07 CST 2022
;; MSG SIZE rcvd: 143
애플리케이션 생성 관찰
물리적 시스템에 게시된 애플리케이션에 액세스