云主机重新部署k8s

作者: peerless_1024 | 来源:发表于2019-02-27 21:15 被阅读0次

    新开了四台centos机子,升级了内核之后,按照如下方式安装,但并未成功

    1. 环境配置(所有节点)

    • 1.1 配置hosts文件
    [root@master ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    192.16.1.224 master
    192.16.1.225 node-1
    192.16.1.226 node-2
    192.16.1.227 node-3
    
    • 1.2 禁用防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1.3 禁用SELINUX
    setenforce 0
    vi /etc/selinux/config
    # SELINUX=disabled
    
    • 1.4 关闭swap
    # 临时关闭swap
    # 永久关闭 注释/etc/fstab文件里swap相关的行
    swapoff -a
    
    • 1.5 开启forward
    # 开启forward
    # Docker从1.13版本开始调整了默认的防火墙规则
    # 禁用了iptables filter表中FOWARD链
    # 这样会引起Kubernetes集群中跨Node的Pod无法通信
    # docker 1806,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的
    
    iptables -P FORWARD ACCEPT
    
    
    • 1.6 配置转发相关参数,否则可能会出错
    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    vm.swappiness=0
    EOF
    
    modprobe br_netfilter
    sysctl -p /etc/sysctl.d/k8s.conf
    # 查看命令
    sysctl --system
    
    • 1.7 可选择项:加载ipvs相关内核模块(用于负载均衡)
    # 加载ipvs相关内核模块
    # 如果重新开机,需要重新加载
    yum install -y ipvsadm
    modprobe ip_vs
    modprobe ip_vs_rr
    modprobe ip_vs_wrr
    modprobe ip_vs_sh
    modprobe nf_conntrack_ipv4
    lsmod | grep ip_vs
    
    • 1.8 CNI插件部署(所有节点)
    sudo mkdir -p /opt/cni/bin 
    cd /opt/cni/bin
    # 到release页面下载二进制文件
    wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz
    sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz
    
    • 1.9 时间同步
    #安装ntp: 
    yum install -y ntp
    
    #同步时间 (与国家授时中心同步)
    ntpdate 0.cn.pool.ntp.org
    
    • 1.10 配置免密登录

    2. 安装Docker(所有节点)

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
        
    # 卸载安装指定版本docker-ce
    yum remove -y docker-ce docker-ce-selinux container-selinux
        
    yum install -y --setopt=obsoletes=0 \
    docker-ce-17.03.1.ce-1.el7.centos \
    docker-ce-selinux-17.03.1.ce-1.el7.centos
    
    

    Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信。但这里通过安装docker 1806,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的,因为1706还是需要手动调整这个策略的。

    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
     "registry-mirrors": ["http://6f2b9229.m.daocloud.io"]
    }
    EOF
    
    systemctl enable docker && systemctl restart docker
    

    确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT

    
    

    3. 安装k8s组件

    参考了 https://juejin.im/post/5b45d4185188251ac062f27c

    • 3.1 所有节点操作
    # 配置源
    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 install -y kubelet-1.11.0 kubeadm-1.11.0 kubectl-1.11.0
    
    
    # 获取docker的cgroups
    DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f3)
    echo $DOCKER_CGROUPS
    cgroupfs
    
    # 配置kubelet使用国内pause镜像
    # 配置kubelet的cgroups
    cat >/etc/sysconfig/kubelet<<EOF
    KUBELET_DNS_ARGS="--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
    KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
    EOF
    
    # 启动
    systemctl daemon-reload 
    systemctl enable kubelet && systemctl start kubelet
    
    
    • 3.2 master节点操作
    # 1.11 版本 centos 下使用 ipvs 模式会出问题
    # 参考 https://github.com/kubernetes/kubernetes/issues/65461
    
    # 生成配置文件
    cat >kubeadm-master.config<<EOF
    apiVersion: kubeadm.k8s.io/v1alpha2
    kind: MasterConfiguration
    kubernetesVersion: v1.11.0
    imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
    api:
      advertiseAddress: 192.16.1.224
    
    controllerManagerExtraArgs:
      node-monitor-grace-period: 10s
      pod-eviction-timeout: 10s
    
    networking:
      podSubnet: 10.244.0.0/16
      
    kubeProxy:
      config:
        # mode: ipvs
        mode: iptables
    EOF
    
    # 提前拉取镜像
    # 如果执行失败 可以多次执行
    kubeadm config images pull --config kubeadm-master.config
    
    # 初始化
    kubeadm init --config kubeadm-master.config
    
     kubeadm join 192.16.1.224:6443 --token 169sqg.x15rfmfluchsiitz --discovery-token-ca-cert-hash sha256:a1346a6ef31590f9ad3ac39e93d2b78a8f13b74f510b8cedc4a9df02504f9612
    
    rm -rf $HOME/.kube
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 查看node节点
    kubectl get nodes
    
    # 只有网络插件也安装配置完成之后,才能会显示为ready状态
    # 设置master允许部署应用pod,参与工作负载,现在可以部署其他系统组件
    # 如 dashboard, heapster, efk等
    # 这一步选做,表示master节点也可以当工作节点
    kubectl taint nodes --all node-role.kubernetes.io/master-
    
    # 下载网络配置
    mkdir flannel && cd flannel
    wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
    
    # 修改网络配置
    # 此处的ip配置要与上面kubeadm的pod-network一致
      net-conf.json: |
        {
          "Network": "10.244.0.0/16",
          "Backend": {
            "Type": "vxlan"
          }
        }
    
    # 修改镜像
    image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
    
    # 这里v0.10.0版有一个bug,需要为启动flannel的daemonset添加toleration,以允许在尚未Ready的节点上部署flannel pod:
    
    tolerations:
          - key: node-role.kubernetes.io/master
            operator: Exists
            effect: NoSchedule
          - key: node.kubernetes.io/not-ready
            operator: Exists
            effect: NoSchedule
    
    
    # 如果Node有多个网卡的话,参考flannel issues 39701,
    # https://github.com/kubernetes/kubernetes/issues/39701
    # 目前需要在kube-flannel.yml中使用--iface参数指定集群主机内网网卡的名称,
    # 否则可能会出现dns无法解析。容器无法通信的情况,需要将kube-flannel.yml下载到本地,
    # flanneld启动参数加上--iface=<iface-name>
        containers:
          - name: kube-flannel
            image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
            command:
            - /opt/bin/flanneld
            args:
            - --ip-masq
            - --kube-subnet-mgr
            - --iface=eth1
    
    cd /opt/cni/bin
    sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz
    # 启动
    kubectl apply -f kube-flannel.yml
    
    # 查看
    kubectl get pods --namespace kube-system
    kubectl get svc --namespace kube-system
    
    # 测试DNS
    
    #启动
    kubectl run nginx --replicas=2 --image=nginx:alpine --port=80
    kubectl expose deployment nginx --type=NodePort --name=example-service-nodeport
    kubectl expose deployment nginx --name=example-service
    #查看状态
    kubectl get deploy
    kubectl get pods
    kubectl get svc
    kubectl describe svc example-service
    #DNS解析
    kubectl run curl --image=radial/busyboxplus:curl -i --tty
    #正常输出********************************************************
    nslookup kubernetes.default
    Server:    10.96.0.10
    Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
    
    Name:      kubernetes.default
    Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
    #****************************************************************
    nslookup kubernetes
    nslookup example-service
    curl example-service
    #访问测试
    # 10.96.59.56 为查看svc时获取到的clusterip
    curl "10.96.59.56:80"
    
    # 32223 为查看svc时获取到的 nodeport
    http://11.11.11.112:32223/
    http://11.11.11.113:32223/
    
    #清理删除
    kubectl delete svc example-service example-service-nodeport
    kubectl delete deploy nginx curl
    
    • 忘记初始master节点时的node节点加入集群命令怎么办
    # 简单方法
    kubeadm token create --print-join-command
    
    # 第二种方法
    token=$(kubeadm token generate)
    kubeadm token create $token --print-join-command --ttl=0
    
    

    参考教程:
    使用kubeadm安装k8s-1.11版本
    CentOS-7使用kubeadm安装Kubernetes-1.12.0(how & why)
    使用kubeadm安装Kubernetes 1.12
    K8S安装注意事项
    docker用户过渡到kubectl命令行指南

    相关文章

      网友评论

        本文标题:云主机重新部署k8s

        本文链接:https://www.haomeiwen.com/subject/gdyquqtx.html