단일 마스터로 K8S 클러스터를 설치하는 방법을 단계별로 알려드립니다.

CKA 학습 경로


클라우드 네이티브 시대, 함께 배워요

기사 디렉토리

  • 시스템 환경
  • 서버 계획
  • 1. 사전 구성
  • 2. 도커와 kubeadm/kubelet 설치
  • 3. K8sMaster 노드 배포
  • 4. K8sNode 노드 가입
  • 5. 컨테이너 네트워크(CNI) 배포
  • 6. 대시보드 배포

시스템 환경:

CentOS 7.9
도커 20-ce
쿠버네티스 1.23

서버 계획:

192.168.1.186 k8s-마스터
192.168.1.187 k8s-노드1
192.168.1.188 k8s-노드2

1. 사전 구성

1. yum update -y를 실행하여 서버 시스템을 최신 버전으로 업데이트합니다.

yum update -y

성공적으로 실행한 후 예상되는 결과는 다음과 같습니다.

 2. 시스템 보호벽, Selinux, Swap 파티션(모든 노드)을 닫습니다.

#关闭系统防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭Selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
#关闭Swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab

예상 결과는 다음과 같습니다(스크린샷은 마스터 노드만임).

 마스터 노드에 호스트 추가

cat >> /etc/hosts << EOF
192.168.1.186 k8s-master
192.168.1.187 k8s-node1
192.168.1.188 k8s-node2
EOF

예상되는 결과는 그림과 같습니다.

 브리지된 IPV4 트래픽을 iptables에 전달

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

구성을 적용합니다.

sysctl --system

 구성 후 예상 결과:

2. Docker, kubeadm 및 kubelet [모든 노드] 설치

1. 도커 설치

#下载docker的阿里云安装源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#安装docker
yum -y install docker-ce
#设置为开机启动,并启动docker
systemctl enable docker && systemctl start docker

예상되는 결과는 다음과 같습니다.

 Docker 가속기 구성

#配置docker加速
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker
systemctl restart docker
#查看docker信息

docker info

예상되는 결과는 다음과 같습니다.

 3. Alibaba Cloud yum 소프트웨어 소스를 구성하고 Kubeadm, kubelet 및 kubectl을 설치합니다.

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

 4. K8s의 지정된 버전을 설치하고 설치하려면 버전 1.23.0을 지정하십시오.

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

설치 과정:

 설치 완료 후 예상 결과:

 시작 추가

systemctl enable kubelet

 

3. K8SMaster 노드 배포

계획된 마스터 노드에서 실행

kubeadm init \
  --apiserver-advertise-address=192.168.1.186 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

설치 과정:


설치 후 예상되는 결과는 다음과 같습니다.

 참고: 이 설치 단계 동안 프롬프트가 표시됩니다.

[kubelet-check] 'curl -sSL http://localhost:10248/healthz'와 동일한 HTTP 호출이 오류로 인해 실패했습니다: "http://localhost:10248/healthz" 가져오기: tcp [::1]:10248 다이얼 : 연결: 연결이 거부되었습니다.

    죄송합니다. 오류가 발생했습니다.
        조건을 기다리는 동안 시간이 초과되었습니다.

    이 오류의 원인은 다음과 같습니다.
        - kubelet이 실행되고 있지 않습니다
        . - 어떤 방식으로든 노드 구성이 잘못되어 kubelet이 비정상입니다(필수 cgroup 비활성화).

    systemd 기반 시스템을 사용하는 경우 다음 명령을 사용하여 오류 문제 해결을 시도할 수 있습니다:
        - 'systemctl status kubelet'
        - 'journalctl -xeu kubelet'

    또한 컨테이너 런타임에 의해 시작될 때 제어 플레인 구성요소가 충돌하거나 종료될 수 있습니다.
    문제를 해결하려면 선호하는 컨테이너 런타임 CLI를 사용하여 모든 컨테이너를 나열하세요.

    다음은 docker에서 실행 중인 모든 Kubernetes 컨테이너를 나열하는 방법의 한 가지 예입니다.
        - 'docker ps -a | 그렙 큐브 | grep -v Pause'
        실패한 컨테이너를 찾으면 다음을 사용하여 해당 로그를 검사할 수 있습니다.
        - 'docker log CONTAINERID'

오류 실행 단계 wait-control-plane: Kubernetes 클러스터를 초기화할 수 없습니다.
이 오류의 스택 추적을 보려면 --v=5 이상으로 실행하세요.

이는 스왑 파티션을 임시로 직접 닫지 않아서 발생하는 문제이므로, kubelet을 다시 시작하려면 swapoff -a를 실행하면 됩니다.

#临时关闭swap分区
swapoff -a

 4. K8Snode 노드 가입

kubeadm을 사용하여 노드 노드를 클러스터에 조인합니다(모든 하위 노드가 실행되어야 함).

kubeadm join 192.168.1.186:6443 --token rd8ymi.oeztlaletd9agkp0 \
	--discovery-token-ca-cert-hash sha256:b0c8918fc95faab2cc71d49a8f7ebde6902c4e5c60034f91252db6454f01c24c

 kubectl 환경 변수 및 인증을 추가하고 추가된 노드 노드를 확인합니다.

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#查看node节点
kubectl get nodes

 노드가 현재 준비 중이며 실행되고 있지 않습니다.

준비된 예상 결과는 그림과 같습니다.

 참고: 기본 토큰은 24시간 동안 유효하며, 24시간을 초과하는 경우 다시 생성해야 합니다.

kubeadm token create --print-join-command

5. Calico(CNI) 컨테이너 네트워크에 가입하세요.

calico는 k8s의 주류 네트워크 솔루션인 순수 3계층 데이터 네트워크 센터 솔루션입니다.

다운로드yaml

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

다운로드 후 Calico 배포

kubectl apply -f calico.yaml

Calico 배포 정보 보기

 kubectl get pods -n kube-system

예상되는 결과는 그림과 같습니다.

 6. 대시보드 배포

Dashboard는 k8s에서 공식적으로 제공하는 UI로, K8S 클러스터의 자원을 관리할 수 있습니다.

vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
...

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

다음에 추가:

노드 포트: 30001

유형: 노드포트

# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

접속된 주소는 http://masterip:30001 입니다.

로그인 시 획득한 Token을 사용하여 로그인합니다.

로그인 기대치는 다음과 같습니다.

내 공식 계정을 팔로우하고 운영 및 유지 관리, 보안 및 개발에 대한 지식을 함께 배우고 함께 열심히 일하고 함께 발전하는 모든 사람을 환영합니다.

 

추천

출처blog.csdn.net/u011630259/article/details/125194819