zoukankan      html  css  js  c++  java
  • kubeadm安装kubernetes 1.12版本

    直接写过程,有些描述就省略了
    关于kubeadm安装k8s 1.11.2版本可以查看:https://www.cnblogs.com/shansongxian/p/9753603.html 首先查看下k8s 1.12版的changlog有哪些改动
    github地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md#changelog-since-v1120

    终于支持docker 18.06了

    首先说下环境:
    系统:centos 7 1708版本
    地址:192.168.237.128(演示环境无额外Nodes节点机器)
    docker: 18.06
    k8s: 1.12.1
    最低配置:2核2G

    第一步调整下系统内核参数,hosts修改,加载ipvs模块,关闭swap,selinux,firewall,系统时间
    192.168.237.128 k8s-master
    
    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    vm.swappiness = 0
    EOF
    sysctl --system
    
    yum install ipset ipvsadm conntrack-tools.x86_64 -y
    
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
     #!/bin/bash
    ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack_ipv4"
    for kernel_module in ${ipvs_modules}; do
     /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
     if [ $? -eq 0 ]; then
     /sbin/modprobe ${kernel_module}
     fi
    done
    EOF
    chmod 755 /etc/sysconfig/modules/ipvs.modules 
    sh /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
    
    systemctl stop firewalld && systemctl disable firewalld
    sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
    sed -i 's/.*swap.*/#&/' /etc/fstab
    echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com > /dev/null 2>&1" >> /var/spool/cron/root

      重启下系统  

    第二步安装docker

    yum install container-selinux libseccomp libtool-ltdl -y
    rpm -ivh https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm
    systemctl start docker && systemctl enable docker
    cat > /etc/docker/daemon.json << EOF
    {
         "registry-mirrors": ["https://8vtb3cuu.mirror.aliyuncs.com"]
    }
    EOF
    systemctl restart docker
    
    
    

    第三步安装kubeadm

    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
    
    默认安装kubeadm kubectl kubelet cri-tools kubernetes-cni socat
    查看安装版本
    yum list kubeadm --showduplicates 
    yum list kubectl --showduplicates
    yum list kubelet --showduplicates
    yum list kubernetes-cni --showduplicates
    
    不指定版本默认安装最新版1.12.1
    yum install kubeadm -y    

    第四步利用kubeadm安装k8国内无法下载谷歌镜像,使用anjia0532镜像,更改为默认kubeadm中的镜像名称

    kubeadm config images list --kubernetes-version v1.12.1
    
    使用shell脚本快速操作:
    #!/bin/bash
    KUBE_VERSION=v1.12.1
    KUBE_PAUSE_VERSION=3.1
    ETCD_VERSION=3.2.24
    DNS_VERSION=1.2.2
    
    ANJIA_URL=anjia0532/google-containers
    GCR_UR=k8s.gcr.io
    
    images=(kube-apiserver:${KUBE_VERSION}
    kube-controller-manager:${KUBE_VERSION}
    kube-scheduler:${KUBE_VERSION}
    kube-proxy:${KUBE_VERSION}
    pause:${KUBE_PAUSE_VERSION}
    etcd:${ETCD_VERSION}
    coredns:${DNS_VERSION})
    
    for imageName in ${images[@]} ; do
      docker pull $ANJIA_URL.$imageName
      docker tag $ANJIA_URL.$imageName $GCR_UR/$imageName
      docker rmi $ANJIA_URL.$imageName
    done
    
    打印kubeadm默认配置,kubeadm配置文件按照默认配置进行修改
    kubeadm config print-default
    
    kubeadm v1.12 kubeProxy默认已经使用ipvs模式,在v1.11.x中还需要在配置中指定,如果服务器有多个网卡地址,还需要指定出口IP,使用参数--apiserver-advertise-address=<ip-address>
    必需要指定的参数是Pod的网段,使用参数--pod-network-cidr  除了使用参数方式外还可以创建kubeadm-config.yaml文件进行定制化
    
    这里使用加载yaml配置文件的方式,也是推荐的方法
    指定10.244.0.0/16网段作为Pod的地址段,也是Flannel网络的默认网段
    kind and apiVersion是需要在yaml中强制拥有的信息,
    
    apiVersion: kubeadm.k8s.io/v1alpha3
    kind: ClusterConfiguration
    kubernetesVersion: v1.12.1
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.244.0.0/16
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    mode: "ipvs"
    
    
    
    执行Init创建集群
    systemctl enable kubelet.service
    kubeadm init --config kubeadm-config.yaml
    kubeadm会默认安装Coredns kube-proxy两个插件
    
    root用户直接添加环境变量/etc/profile
    kubectl需要读取授权信息访问kubernetes集群
    export KUBECONFIG=/etc/kubernetes/admin.conf
    
    非root用户则执行屏幕输出的
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    记录输出的Kubeadm join语句,用于添加工作节点 
    
    查看集群状态
    kubectl get cs
    查看节点,pods
    kube get nodes
    kube get pods,svc -n kube-system

    第五步添加Pod网络组件

    必须在任何应用程序之前部署网络。此外,CoreDNS将不会在安装网络之前启动
    注意,kubeadm默认设置更安全的群集并强制使用RBAC。确保您的网络清单支持RBAC
    
    我这里master和Nodes都在同一台机器,默认Master是不允许运行用户Pod的
    执行:
    kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
    
    
    部署Flannel网络
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    有多个网卡的话,需要在kube-flannel.yml中使用--iface参数指定集群主机内网网卡的名称,(集群中的主机通过内网网段通信)否则可能会出现dns无法解析。flanneld启动参数加上--iface=<iface-name>
            args:
            - --ip-masq
            - --kube-subnet-mgr
            - --iface=ens33
    
    #默认Pod网段(为kubeadm.yaml定义的Pod网段,如果不是10.244.0.0/16则需要修改)
      net-conf.json: |
        {
          "Network": "10.244.0.0/16",
          "Backend": {
            "Type": "vxlan"
          }
        }
    
    #应用flannel
    kubectl apply -f kube-flannel.yml
    
    若出现imagepullerror无法下载quay.io/coreos/flannel:v0.10.0-amd64时,使用下面方法:
    docker pull registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64
    docker tag registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
    docker rmi registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64

    第六步 配置treak ingress

    kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-rbac.yaml
    
    #使用DaemonSets部署方式
    kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml
    
    wget https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/ui.yaml
    修改ui.yaml中host域名
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: traefik-web-ui
      namespace: kube-system
    spec:
      rules:
      - host: www.abc.com
        http:
          paths:
          - path: /
            backend:
              serviceName: traefik-web-ui
              servicePort: web
    
    添加hosts映射访问域名
    

      

    
    

    第七步配置Dashboard

    下载anjia镜像
    docker pull anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0
    docker tag anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
    docker rmi anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0
    
    wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
    
    在yaml文件末尾加上
      type: NodePort
    使用此方法暴露dashboard服务
    
    创建rdbc授权文件kubernetes-dashboard-rbac.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kube-system
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kube-system
    
    #应用定义文件
    kubectl apply -f kubernetes-dashboard.yaml
    kubectl apply -f kubernetes-dashboard-rbac.yaml
    #查看admin-user用户token
    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
    
    #复制token,在浏览器上选择令牌方式
    使用火狐浏览器,https://ip:port
    
    

      

      

      

      

     
  • 相关阅读:
    Tomcat日志、项目中的log4j日志、e.printStackTrace()——我的日志最后到底跑哪去了?
    MySQL中有关TIMESTAMP和DATETIME的总结
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    @RequestBody和@RequestParam区别
    Synchronized的jvm实现
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/shansongxian/p/9812441.html
Copyright © 2011-2022 走看看