最精简Kubenetes(1.15.1)集群部署教程--基于CentOS 7

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/suo082407128/article/details/99584419

一、k8s环境要求

  • 运行以下之一的一台或多台机器:
    • Ubuntu 16.04+
    • Debian 9
    • CentOS 7
    • RHEL 7
    • Fedora 25/26 (best-effort)
    • HypriotOS v1.0.1+
    • Container Linux (tested with 1800.6.0)
  • 每台机器2 GB或更多的RAM(任何更少的内存将为您的应用留下很小的空间)
  • 2个CPU或更多
  • 群集中所有计算机之间的网络连通
  • 每个节点有唯一主机名,MAC地址和product_uuid(一般只用关注主机名)
  • 端口在您的计算机上打开(这个一般都会满足)
  • 禁用Swap。必须禁用Swap才能使kubelet正常工作(Swap disabled)

二、开始安装(CentOS7)

修改hostname及hosts

  1. 修改机器主机名,我这里改为k8s-master、k8s-node1、k8s-node2、k8s-node3
    vi /etc/hostname
  2. 添加hosts
    vi /etc/hosts
  3. 修改完成后重启
  4. 重启后,各机器通过主机名可互相ping通

安装docker

docker版本需要和k8s版本匹配,1.15.1需要docker至少是18.09及以上版本

  • 卸载旧版本(没安装可忽略)

    # 在 master 节点和 worker 节点都要执行
    sudo yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine
    
  • 删除镜像、容器等
    rm -rf /var/lib/docker

  • 设置 yum repository

    # 在 master 节点和 worker 节点都要执行
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    
    sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
  • 安装docker

    # 在 master 节点和 worker 节点都要执行
    sudo yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
    
  • 修改cgroup,创建或修改/etc/docker/daemon.json:

    {
     "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
  • 启动及开机启动

    systemctl start docker
    systemctl enable docker
    
  • 检查 docker 版本及cgroup

    # 在 master 节点和 worker 节点都要执行
    docker version
    docker info | grep Cgroup   # 结果:Cgroup Driver: systemd
    

k8s配置

  • 配置k8s的yum源

    # 在 master 节点和 worker 节点都要执行
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
           http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
  • 关闭 防火墙、SeLinux、swap

    # 在 master 节点和 worker 节点都要执行
    systemctl stop firewalld
    systemctl disable firewalld
    
    setenforce 0
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    
    swapoff -a
    yes | cp /etc/fstab /etc/fstab_bak
    cat /etc/fstab_bak |grep -v swap > /etc/fstab
    
  • 修改 /etc/sysctl.conf

    # 在 master 节点和 worker 节点都要执行
    vim /etc/sysctl.conf
    
    # 向其中添加
    vm.swappiness = 0
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    
  • 执行命令以应用

    # 在 master 节点和 worker 节点都要执行
    sysctl -p
    

k8s安装

  • 安装kubelet、kubeadm、kubectl
    # 在 master 节点和 worker 节点都要执行
    yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
    
  • 启动 kubelet
    systemctl enable kubelet && systemctl start kubelet
    

集群初始化

  • 使用kubeadm config print init-defaults可以打印集群初始化默认的使用的配置,根据此制作出本次使用kubeadm初始化集群所需的配置文件kubeadm.yaml(根据自身情况修改)

    # 在master上创建kubeadm-config.yaml
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: InitConfiguration
    localAPIEndpoint:
      advertiseAddress: k8s-master  # 需要修改
      bindPort: 6443
    nodeRegistration:
      taints:
      - effect: PreferNoSchedule
        key: node-role.kubernetes.io/master
    ---
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    kubernetesVersion: v1.15.1
    imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
    controlPlaneEndpoint: "k8s-master:6443"    #需要修改
    networking:
      podSubnet: 10.244.0.0/16  #每种网络配置不同
    
  • podSubnet 所使用的网段不能与节点所在的网段重叠

  • 初始化master

    # 只在 master 节点执行
    kubeadm init --config=kubeadm-config.yaml --upload-certs
    

    根据您服务器网速的情况,您需要等候 1 – 10 分钟

  • 执行结果如下图所示:

    Your Kubernetes master has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      /docs/concepts/cluster-administration/addons/
    
    You can now join any number of machines by running the following on each node
    as root:
    
      kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
    
  • 初始化 root 用户的 kubectl 配置

    # 只在 master 节点执行
    rm -rf  $HOME/.kube/
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    

安装pod网络

  • 官网上有多种网络可选,这里选择安装flannel
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
    
  • 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
    watch kubectl get pod -n kube-system
    

加入集群

  • 获得 join命令参数
    # 只在 master 节点执行
    kubeadm token create --print-join-command
    
  • 可获取kubeadm join 命令及参数,如下所示
    # kubeadm token create 命令的输出
    kubeadm join k8s-master:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
    
  • 在所有的 node节点执行
    kubeadm join k8s-master:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
    
  • 检测结果
    # 只在 master 节点执行
    kubectl get nodes
    
    结果
    在这里插入图片描述

三、其他

从master以外的节点控制集群

将API服务器代理到localhost

四、卸载集群

  • 集群重置
    #所有节点
    kubeadm reset
    
  • 卸载
    #所有节点
    yum remove kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
    

六、问题排查日志查看

  • 查看系统日志
    tail -f /var/log/messages
  • 查看pod描述
    kubectl describe pod pod-name -n namespace
  • 查看pod日志
    kubectl logs pod-name -n namespace

五、k8s常用命令

  • kubectl create namespace quota-pod-example
  • kubectl label node centos-2gb-sfo1-03 role=frontend
  • kubectl apply -f deployment.yaml
  • kubectl delete -f deployment.yaml

整理不易,感谢赞赏~~~~

微信赞赏码

猜你喜欢

转载自blog.csdn.net/suo082407128/article/details/99584419