Kubeadm은 Kubernetes 클러스터의 신속한 배포를 위해 kubeadm init 및 kubeadm Join을 제공하는 K8s 배포 도구입니다.
1. 환경 준비
서버 요구 사항:
- 권장 최소 하드웨어 구성: 2코어 CPU, 2G 메모리, 20G 하드 디스크
- 서버가 외부 네트워크에 접속하는 것이 가장 좋습니다. 인터넷에서 이미지를 가져와야 합니다. 서버가 인터넷에 접속할 수 없는 경우 해당 이미지를 미리 다운로드하여 노드로 가져와야 합니다.
소프트웨어 환경:
OS: centos7.9_x64
도커: 20-ce
K8s: 1.23
서버:
k8s-마스터:192.168.176.138
k8s-node1:192.168.176.136
k8s-node2:192.168.176.137
2. 초기화 구성
설치 환경 준비: 모든 노드에서 다음 작업을 수행해야 합니다.
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.176.138 k8s-master
192.168.176.136 k8s-node1
192.168.176.137 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 # 生效
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
Docker, kubeadm, kubelet 설치 [모든 노드 작업]
도커를 설치합니다:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
이미지 다운로드 가속기를 구성합니다.
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker
docker info #查看docker信息,进行确认
Alibaba Cloud 소프트웨어 소스 추가:
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
kubeadm, kubelet, kubectl을 설치합니다.
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
3. k8s-master 배포 [마스터 노드 실행]
kubeadm 배포
kubeadm init \
--apiserver-advertise-address=192.168.176.138 \
--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
--apiserver-advertise-address 클러스터 광고 주소
--image-repository 기본 풀 이미지 주소 k8s.gcr.io는 중국에서 액세스할 수 없으므로
다음과 일치하는 Alibaba Cloud 이미지 웨어하우스 주소 --kubernetes-version K8s 버전을 지정합니다.
--service-cidr 클러스터 내부 가상 네트워크, 포드 통합 액세스 입구 --pod- network
-cidr 포드 네트워크, 아래 배포된 CNI 네트워크 구성 요소 yaml과 일치
초기화는 일정 시간 동안 기다려야 하며, 초기화 후 조인 명령이 출력되어 먼저 복사되고 노드 node는 마스터에 조인할 때 사용됩니다.
kubeadm join 192.168.176.138:6443 --token 3jpr2o.snrmtx9p8qoo6w9p \
--discovery-token-ca-cert-hash sha256:10e85d3372e0307bfebef85fac9d21d2f647383129f5742c00c44402264d05e2
k8s 인증 파일을 복사합니다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
작업 노드 보기:
kubectl get nodes
아직 네트워크 플러그인이 배포되지 않았기 때문에 준비가 되지 않았습니다. NotReady이므로 계속 진행하세요.
4. k8s 노드 노드 구성 [노드 노드 동작]
클러스터에 새 노드를 추가하려면 kubeadm init에서 kubeadm Join 명령 출력을 실행하세요.
기본 토큰은 24시간 동안 유효하며, 만료되면 해당 토큰을 더 이상 사용할 수 없습니다. 이때 토큰을 다시 생성해야 하며 다음 명령을 사용하여 직접 생성할 수 있습니다.
kubeadm token create --print-join-command
5. 컨테이너 네트워크 배포(마스터 실행)
Calico는 현재 Kubernetes의 주류 네트워크 솔루션인 순수한 3계층 데이터 센터 네트워크 솔루션입니다.
YAML 다운로드:
curl https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml -O
다운로드 후에는 kubeadm init의 --pod-network-cidr에 지정된 것과 동일한 Pod 네트워크 정의(CALICO_IPV4POOL_CIDR)를 수정해야 합니다.
파일을 수정한 후 다음을 배포합니다.
kubectl apply -f calico.yaml
kubectl get pods -n kube-system #执行结束要等上一会才全部running
Calico Pod가 실행되면 노드가 준비됩니다.
6. 대시보드 배포
대시보드는 K8s 리소스의 기본 관리에 사용할 수 있는 공식 UI입니다.
YAML 다운로드 주소:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
기본적으로 대시보드는 클러스터 내에서만 접속이 가능하므로 서비스를 NodePort 형태로 수정하여 외부에 노출시킵니다.
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
접속 주소: https://NodeIP: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}')
출력 토큰을 사용하여 대시보드에 로그인하세요.
k8s 클러스터 구축 완료