Kubeadm 설치 kubernetes

Kubeadm 설치 kubernetes

머리말

kudeadm

Kubeadm은 도구이며 kubernetes 클러스터를 빠르게 생성하기위한이 두 명령과 kubeadm init같은 kubeadm join모범 사례를 제공 합니다.

kubernetes v1.17.0

K8s로 축약되는 kubernetes는 8 자 "ubernete"대신 8의 약어입니다. Kubernetes는 Google의 Borg 시스템에서 탄생 한 강력한 컨테이너 오케스트레이션 시스템입니다. 컨테이너 기술을 기반으로하는 분산 아키텍처를위한 새로운 선도 솔루션입니다. 그 목적은 리소스 관리의 자동화를 실현하고 여러 데이터 센터에서 리소스 활용도를 극대화하는 것입니다.이를 통해 개발 비용의 30 % 이상을 절약하고 나중에 운영 및 유지 관리 비용을 절감 할 수 있습니다. Kubernetes와 전체 ​​생태계 (도구, 모듈, 플러그인) 등)은 Go 언어로 작성되었습니다.

참조 : https://cloud.tencent.com/developer/article/1512662

k8s 시스템을 빠르게 구축

시스템 요구 사항

  • 최소 듀얼 코어
  • RAM 최소 4G
  • 서버 버전이 3.10 이상입니다.

설치 환경 초기화

  1. 시스템 코어 수를 확인하십시오. grep -c'processor '/ proc / cpuinfo

  2. 시스템 커널 버전을 확인하고 업그레이드가 필요한 경우 시스템 커널을 업그레이드하십시오.

    # 查看系统版本
    uname -r
    
    # 升级系统内核版本
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
    
    # 查看当前可用版本
    yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
    
    # 安装最新版内核
    yum --enablerepo=elrepo-kernel install kernel-ml -y
    
    # 设置grab2
    sudo awk -F\' '$1=="menuentry " {
          
          print i++ " : " $2}' /etc/grub2.cfg
    sudo grub2-set-default 0
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # 重启
    reboot
    
  3. 서비스 이름 설정

    # master 节点做下面操作
    hostnamectl set-hostname master
    
    # node 节点做下面操作
    hostnamectl set-hostname node1 | node2 ...
    
  4. 도메인 매핑 설정

    # master 节点做下面操作
    echo "${ip} master" >> /etc/hosts
    
    # node 节点做下面操作
    echo "${ip} node1" >> /etc/hosts
    
  5. 방화벽, selinux 및 스왑 끄기

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    swapoff -a
    sed -i 's/.*swap.*/#&/' /etc/fstab
    
  6. 브리지 된 IPv4 트래픽을 iptables 체인으로 전달하도록 커널 매개 변수 구성

    cp ./config/k8s.conf /etc/sysctl.d/
    echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
    
  7. 국내 yum 소스 구성

    yum install -y wget
    mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
    yum clean all && yum makecache
    
    # 配置 kubernetes 源
    cp ./config/kubernetes.repo /etc/yum.repos.d/
    
    # 配置 docker 源
    cp ./config/docker-ce.repo /etc/yum.repos.d/
    

노드 설치

Docker 설치

# 卸载已有的docker相关服务
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖
sudo yum -y install yum-utils device-mapper-persistent-data lvm2
# 设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker-ce
sudo yum -y install docker-ce docker-ce-cli containerd.io
# 列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
yum list docker-ce --showduplicates | sort -r
# 安装docker
sudo yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io
# 复制配置
mkdir -p /etc/docker
cp ./config/daemon.json /etc/docker

# 启动
sudo systemctl start docker
# 开机自启动
systemctl enable docker

kubeadm 및 kubelet 및 kubectl 노드 설치

# 这里指定一下版本号, k8s 差不多每隔 4个月迭代一次版本, 如果想安装最新的, 可执行这条指令: yum install -y kubelet kubeadm kubectl, 同时也要注意一下, dashboard 也要安装对应版本
yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
systemctl enable kubelet

마스터 노드 설치

  1. 클러스터 초기화

    host_ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
    kubeadm init --kubernetes-version=1.17.0 \
    				--apiserver-advertise-address=${host_ip} \
    				--image-repository registry.aliyuncs.com/google_containers \
    				--service-cidr=10.1.0.0/16 \
    				--pod-network-cidr=10.244.0.0/16
    

    여기에 약간의 트릭이 있습니다. 마스터 노드 ip를 물리적 시스템 ip에 강하게 바인딩하지 않는 것이 가장 좋습니다. docker가 먼저 설치되므로 기본 ip 인 docker0 : 172.17.0.1을 사용할 수 있습니다. 나중에 클러스터 마이그레이션을 수행하는 경우 물리적 시스템 ip를 변경하기 만하면됩니다. 쪽으로

  2. kubectl 도구 구성

    # 不配置的话 kubectl 会没权限
    mkdir -p /root/.kube
    cp /etc/kubernetes/admin.conf /root/.kube/config
    
  3. 플란넬 네트워크 배포

    kubectl apply -f ./config/kube-flannel.yml
    
  4. 대시 보드 배포 (k8s 버전 1.17은 대시 보드 : v2.0.0-beta8에 해당, k8s 버전 1.16은 대시 보드 : v2.0.0-beta6에 해당)

    1. 네임 스페이스 만들기

      kubectl  create namespace kubernetes-dashboar
      
    2. 인증서 생성

      host_ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
      mkdir $HOME/certs && cd $HOME/certs
      #生成证书
      openssl genrsa -out tls.key 2048 
      openssl req -new -out tls.csr -key tls.key -subj '/CN=${host_ip}'
      openssl x509 -req -in tls.csr -signkey tls.key -out tls.crt 
      kubectl create secret generic kubernetes-dashboard-certs --from-file=tls.key --from-file=tls.crt -n kubernetes-dashboard
      cd -
      
    3. 사용자 생성

      kubectl create -f ./config/admin-dashboard1.yaml
      # 查看token
      admin_token=`kubectl get secrets -n kube-system | grep admin-user | awk '{print $1}'`
      kubectl describe secrets ${admin_token} -n kube-system
      

      (컨테이너가 모두 준비된 후 잠시 기다려 https : // $ {host_ip} : 30001을 방문하여 토큰을 통해 인터페이스에 액세스)

기본 포트 번호 수정

k8s 기본 컨테이너 포트 번호 범위는 30000 ~ 32767입니다.

sed -i '24i\ \ \ \ \- --service-node-port-range=1-65535' /etc/kubernetes/manifests/kube-apiserver.yaml

노드 설치

# 到master节点, 输入一下指令,查看加入集群的指令
kubeadm token create --print-join-command

# 然后到 node 节点输入该集群指令
kubeadm join 192.168.9.51:6443 --token m2csqd.xn7p6u9sg6s9hrgv     --discovery-token-ca-cert-hash sha256:3ce27a68518c46ee8ec2fb860328228092c4c60dc45c4859f74b98fd3439b1e9

모니터링 구성 요소 설치

Kubernetes는 metrics-server를 사용 하여 노드 및 포드 수준 리소스 모니터링 제공합니다. Kubernetes 버전 1.8부터는 Metrics API를 통해 CPU, 메모리 및 기타 리소스의 측정 항목 정보를 얻을 수 있습니다. Heapster는 더 이상 유지 관리되지 않으며 설치된 metrics-server 대신 metrics-server로 대체됩니다. -server pod 명령 및 자동 예약이 작동하지 않습니다.

  • 코드 다운로드

    git clone https://github.com/kubernetes-incubator/metrics-server

  • deploy/1.8+/metrics-server-deployment.yaml파일 수정

    # 想要查看每一个 pod 所占用的 cpu 资源和 内存资源, 需要安装监控组件
    # 修改两个地方, 一个是镜像地址改为: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
    # 第二个是添加参数
    #- --logtostderr
    #- --kubelet-insecure-tls
    #- --kubelet-preferred-address-types=InternalIP
    # eg:
          containers:
          - name: metrics-server
            image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
            imagePullPolicy: IfNotPresent
            args:
              - --cert-dir=/tmp
              - --secure-port=4443
              - --logtostderr
              - --kubelet-insecure-tls
              - --kubelet-preferred-address-types=InternalIP
    
  • 모니터링 구성 요소 설치

    # metrics-server文件夹下, 有这五个文件: aggregated-metrics-reader.yaml,auth-delegator.yaml,auth-reader.yaml,metrics-apiservice.yaml,metrics-server-deployment.yaml,metrics-server-service.yaml,resource-reader.yaml
    kubectl create -f ./metrics-server 
    

일반적인 설치 오류

  • 시스템 커널 버전이 너무 낮기 때문에 설치가 비정상입니다.

    -시스템 커널 버전 업그레이드

  • 대시 보드는 로그인 후 많은 forbbien 오류를보고합니다.

    – 대시 보드의 하위 버전과 함께 상위 버전의 k8s가 설치되어있을 수 있으며, 해결책은 k8s 버전에 해당하는 대시 보드를 설치하는 것입니다.

    k8s 버전 대시 보드 버전
    v1.17.0 대시 보드 : v2.0.0-beta8
    v1.16.0 대시 보드 : v2.0.0-beta6

추천

출처blog.csdn.net/zjhcxdj/article/details/108626577