zoukankan      html  css  js  c++  java
  • k8s集群搭建

    1. 工作流程

    2. 虚拟机环境准备

    如果使用现成的服务器可忽略此步

    1. 克隆出三台机器(centos7)

    2. 网络模式选择桥接, 方便局域网设备访问

    3. 网络适配器--高级--MAC地址--生成(每台机器点击一次, 避免因克隆导致MAC地址一样)

    4. 配置静态ip

      # 根据自己的网关配置静态ip, 避免IP发生变化的可能
      sed -i "s/BOOTPROTO=dhcp/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-ens33
      uuid=$(uuidgen ens33)
      sed -i "s/UUID=.*/UUID=$uuid/g" /etc/sysconfig/network-scripts/ifcfg-ens33
      # 192.169.8.1-192.168.8.3, 使用不同的ip分别在不同的机器上执行
      # ip地址及网关等信息根据自己的网络环境来
      echo IPADDR=192.169.8.3 >> /etc/sysconfig/network-scripts/ifcfg-ens33
      echo GATEWAY=192.169.1.1 >> /etc/sysconfig/network-scripts/ifcfg-ens33
      echo NETMASK=255.255.0.0 >> /etc/sysconfig/network-scripts/ifcfg-ens33
      echo NM_CONTROLLED=no >> /etc/sysconfig/network-scripts/ifcfg-ens33
      echo DNS1=114.114.114.114 >> /etc/sysconfig/network-scripts/ifcfg-ens33
      echo DNS2=8.8.8.8 >> /etc/sysconfig/network-scripts/ifcfg-ens33
      # 重启网络
      service network restart
      
    5. 配置主机名及hosts

      # 机器1
      hostnamectl set-hostname k8s-n-1
      sed -i 's/localhost.localdomain/k8s-n-1/g' /etc/hosts
      reboot
      # 机器2
      hostnamectl set-hostname k8s-n-2
      sed -i 's/localhost.localdomain/k8s-n-2/g' /etc/hosts
      reboot
      # 机器3
      hostnamectl set-hostname k8s-n-3
      sed -i 's/localhost.localdomain/k8s-n-3/g' /etc/hosts
      reboot
      
    6. 检测网络环境是否正常

      ping www.baidu.com
      

    3. 部署集群

    无特殊说明下述命令需在所有机器分别执行

    3.1 准备工作

    # 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 关闭 selinux
    sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
    setenforce 0 #临时
    
    # 关闭swap, 禁止虚拟内存
    sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
    swapoff -a #临时
    
    # 确保 br_netfilter 模块被加载
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    # 显示加载br_netfilter
    sudo modprobe br_netfilter
    lsmod | grep br_netfilter
    
    # 设置网桥参数
    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
    

    3.2 安装docker

    yum install -y wget
    # 换国内源
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    # 安装最新版本, 这里不需要安装所有工具, 安装ce即可
    yum install -y docker-ce
    
    mkdir -p /etc/docker
    # 换源并设置native.cgroupdriver为systemd(k8s推荐使用, 不设置会报警告)
    tee /etc/docker/daemon.json <<- EOF
    {
        "registry-mirrors":["https://hub-mirror.c.163.com/"],
        "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    # 设置为开机自启并docker服务
    systemctl enable docker.service
    systemctl start docker.service
    

    3.3 安装kubeadm, kubelet, kubectl

    # 修改yum安装源
    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=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
    # 不指定版本号, 安装最新版, 我安装时版本为1.22.1
    yum install -y kubelet kubeadm kubectl
    # 设置为开机自启并启动服务
    systemctl enable kubelet.service 
    systemctl start kubelet.service 
    

    3.4 部署集群

    在要作为master的机器上执行, 此处我在192.169.8.1上执行下述命令

    # --apiserver-advertise-address 修改为自己的ip
    kubeadm init 
        --apiserver-advertise-address=192.169.8.1 
        --image-repository registry.aliyuncs.com/google_containers 
        --service-cidr=10.1.0.0/16 
        --pod-network-cidr=10.2.0.0/16
    
    # 执行提示信息给出的命令
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 安装网络插件, 因镜像等原因启动的有点慢
    export POD_SUBNET=10.2.0.0/16
    wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
    sed -i "s#10.244.0.0/16#${POD_SUBNET}#" flannel-v0.14.0.yaml
    kubectl apply -f ./flannel-v0.14.0.yaml
    

    安时遇到镜像coredns:v1.8.4从阿里云服务器上拉取不到的问题

    发现是此镜像在阿里云仓库里tag是coredns:1.8.4, 导致使用v1.8.4拉取不到

    解决方案是我们手动拉取此镜像并手动打一个与需求一致的tag

    # 查询需要下载的镜像
    kubeadm config images list
    # 查询本地镜像
    docker images
    # 对比后发现只差coredns:v1.8.4了, 我们手动拉取一下镜像
    docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
    # 重新打一下tag, 使其与我们需要的镜像名一致
    docker tag registry.aliyuncs.com/google_containers/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
    # 删除原有镜像
    docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.4
    # 重新执行init
    

    在其余节点执行init返回的join命令

    kubeadm join 192.169.8.1:6443 --token d07ihy.6p9zjow80lh7fklz 
            --discovery-token-ca-cert-hash sha256:af7a6897afbfcdca6e46d4595ccb9cc28c0d1ed4141120c76cb18156a2641752 
    

    3.5 验证集群状态

    3.5.1 节点信息查看

    # 查询node
    kubectl get nodes
    kubectl get node
    kubectl get no
    

    3.5.2 系统pod查看

    # 查看集群相关pod是否正常启动
    kubectl get pods --all-namespaces
    kubectl get pods -n kube-system
    # -ox
    kubectl get pods -n kube-system -o wide
    

    3.6 配置

    3.6.1 命令自动补全

    yum install -y bash-completion
    # 在 bash 中设置当前 shell 的自动补全
    source <(kubectl completion bash)
    # 在 bash shell 中永久的添加自动补全
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    
    # 可以为 kubectl 使用一个速记别名,该别名也可以与 completion 一起使用
    alias k=kubectl
    complete -F __start_kubectl k
    
  • 相关阅读:
    算算百度云的总成本
    iCloud 包括文稿与数据、日历、提醒事项、 通讯录、备忘录、Safari书签
    娄师德的低调
    我必须创业,否则那5个月的工资谁来发给我
    完整的struts.xml文件骨架
    从程序员的角度谈创业三年
    Delphi 获取Internet缓存文件 -- FindFirstUrlCacheEntry FindNextUrlCacheEntry
    没有别人聪明不可怕,可怕的是别人比你聪明也比你勤奋(活着总要为自己负责,而且首先是对自己的时间负责)
    光思想对是没有用的
    Mac与Linux的一个巨大不同
  • 原文地址:https://www.cnblogs.com/P--K/p/15266992.html
Copyright © 2011-2022 走看看