Linux安装k8s

  1. 作者QQ:67065435 QQ群:669756510

  2. 本站内容全部为作者原创,转载请注明出处!

开始安装

  1. 事先声明

    假设192.168.1.72为主机master的局域网IP
    假设192.168.1.235为主机node01的局域网IP
    
  2. 声明主机名称(master)

    hostnamectl set-hostname master
    echo "192.168.1.72 master" >> /etc/hosts
    echo "192.168.1.235 node01" >> /etc/hosts
    
  3. 声明主机名称(node01)

    hostnamectl set-hostname node01
    echo "192.168.1.72 master" >> /etc/hosts
    echo "192.168.1.235 node01" >> /etc/hosts
    
  4. 局域网端口互通(开发环境)

    # 局域网完全互通(都执行)
    firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/16
    firewall-cmd --permanent --zone=internal --add-port=0-65535/tcp
    firewall-cmd --permanent --zone=internal --add-port=0-65535/udp
    firewall-cmd --reload
    # 公网部分开放(master)
    firewall-cmd --permanent --zone=public   --add-port=6443/tcp
    firewall-cmd --permanent --zone=public   --add-port=30000-32767/tcp
    firewall-cmd --reload
    
  5. 开启防火墙端口(生产环境)

    # 局域网(master)
    firewall-cmd --permanent --zone=internal --add-port=2379/tcp
    firewall-cmd --permanent --zone=internal --add-port=2380/tcp
    firewall-cmd --permanent --zone=internal --add-port=10250/tcp
    firewall-cmd --permanent --zone=internal --add-port=10259/tcp
    firewall-cmd --permanent --zone=internal --add-port=10257/tcp
    firewall-cmd --permanent --zone=internal --add-port=6443/tcp
    firewall-cmd --permanent --zone=internal --add-port=30000-32767/tcp
    firewall-cmd --reload
    # 局域网(node01)
    firewall-cmd --permanent --zone=internal --add-port=8472/udp
    firewall-cmd --permanent --zone=internal --add-port=10250/tcp
    firewall-cmd --permanent --zone=internal --add-port=10255/tcp
    firewall-cmd --permanent --zone=internal --add-port=30000-32767/tcp
    firewall-cmd --reload
    
  6. 关闭SELinux(都执行)

    setenforce 0
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    getenforce
    
  7. 关闭swap(都执行)

    swapoff -a
    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
  8. 配置内核参数(都执行)

    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    
    sysctl --system
    
  9. 安装docker(都执行)

  10. 添加k8s源(都执行)

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    yum clean all
    yum makecache
    
  11. 安装kubelet、kubeadm、kubectl(都执行)

    # 指定版本是为了保证系统稳定性
    # disableexcludes: 禁用这些包的更新
    yum -y --nogpgcheck install kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15 --disableexcludes=kubernetes
    
    systemctl enable kubelet
    systemctl start kubelet
    
  12. 初始化(master)

    kubeadm init \
      --apiserver-advertise-address=192.168.1.72 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16 \
      --kubernetes-version v1.20.15 \
      --control-plane-endpoint="192.168.1.72:6443" \
      --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
      --upload-certs
    
    # 备选--image-repository
    registry.cn-hangzhou.aliyuncs.com/google_containers
    registry.aliyuncs.com/google_containers
    docker.io/googlecontainers
    
    # 初始化成功后,会输出类似以下信息,妥善保存:
    # kubeadm join 192.168.1.72:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \
    #     --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
  13. 配置kubectl(master)

    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config
    echo "export KUBECONFIG=/root/.kube/config" >> ~/.bash_profile
    source ~/.bash_profile
    
  14. 安装Flannel网络插件(master)

    # 从本文下载
    wget https://n.so1234.top/1centos/Docker/kube-flannel.yml -O /etc/kubernetes/manifests/kube-flannel.yml
    # 从官方下载
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -O /etc/kubernetes/manifests/kube-flannel.yml
    kubectl apply -f /etc/kubernetes/manifests/kube-flannel.yml
    
  15. 挂载节点(node01)

    # 执行前面记下的join命令
    kubeadm join 192.168.1.72:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
  16. 如前面未记下命令,重新生成token(master)

    # 生成新的token
    kubeadm token create
    
    # 获取 discovery-token-ca-cert-hash
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    
    # 组合成完整的join命令
    echo "kubeadm join 192.168.1.72:6443 --token $(kubeadm token create) --discovery-token-ca-cert-hash sha256:$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //')"
    
    # 执行成功后,会输出类似以下信息,重新在node01执行:
    kubeadm join 192.168.1.72:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
  17. 查看状态(master)

    # 查看集群信息
    kubectl cluster-info
    kubectl get componentstatuses
    
    # 查看节点状态
    kubectl get nodes
    kubectl describe node 节点名称
    
    # 查看所有pod状态
    kubectl get pods -A
    
    # 查看所有服务状态
    kubectl get services -A
    

问题排查

  1. kubelet启动失败

    # 查看 kubelet 状态
    systemctl status kubelet
    
    # 查看 kubelet 日志
    journalctl -xeu kubelet
    
  2. Pod一直处于Pending状态

    # 查看Pod详情
    kubectl describe pod <pod-name>
    
    # 查看节点资源情况
    kubectl describe node <node-name>
    
  3. 网络插件故障

    # 重装Flannel
    kubectl delete -f /etc/kubernetes/manifests/kube-flannel.yml
    kubectl apply -f /etc/kubernetes/manifests/kube-flannel.yml
    
  4. 彻底卸载k8s

Copyright © 鲸小鱼 2012-∞ all right reserved,powered by Gitbook修订: 2025-11-18 20:28

results matching ""

    No results matching ""