美文网首页
kubeadm安装k8s 1.6.4

kubeadm安装k8s 1.6.4

作者: zoushiwen | 来源:发表于2019-04-25 16:40 被阅读0次

    基本环境:
    centos 7.2 x64

    • 使用外部etcd集群
    • 使用LVS-VIP作为API
    • 普通节点上不调度除了openstack以外的任何pod(包括flannel等kube-system的pod)
    • 普通节点上尽量不操作任何物理机的iptables和网卡
    • 认证流程
    • api/scheduler/controller 的镜像
    • kubernetes 二进制的编译制作

    初始化操作:

    1. 更新软件包
    yum update systemd
    yum update dracut
    
    1. 关闭SElinux
    # Use Enforcing or 1 to put SELinux in enforcing mode.
    # Use Permissive or 0 to put SELinux in permissive mode.
    setenforce 0
    
    1. 关闭firewalld服务
    systemctl stop firewalld
    systemctl disable firewalld
    
    1. 添加/etc/hosts
    echo -n " 
    192.4.5.6 docker-registry
    10.202.145.86 node1
    10.202.145.85 node2
    " >>/etc/hosts
    

    安装docker

    1. 安装
      yum install docker

    docker --version
    Docker version 1.12.6, build 3a094bd/1.12.6

    1. 修改配置
      修改docker配置文件/etc/sysconfig/docker,确保可以在docker私有仓库中拉到镜像
      -INSECURE_REGISTRY='--insecure-registry docker-registry:5000'
      +# INSECURE_REGISTRY='--insecure-registry'

    可执行如下命令自动替换:

    cp -vf /etc/sysconfig/docker /etc/sysconfig/docker.bak
    perl -p -i -e "s/\#\ INSECURE_REGISTRY=\'--insecure-registry\'/INSECURE_REGISTRY=\'--insecure-registry\ docker-registry:5000\'/" /etc/sysconfig/docker
    
    

    ==关闭docker对iptables的控制==

    /etc/sysconfig/docker 文件添加--iptables=false 选项

    OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --iptables=false'
    
    1. 启动
    systemctl enable docker
    systemctl start docker
    # 如果之前已经启动,需要重启使配置生效。
    systemctl restart docker
    
    1. 确认是否配置成功
      启动成功后,可以测试一下是否可用:
    docker pull docker-registry:5000/gcr.io/google_containers/etcd-amd64:3.0.17
    

    系统配置

    echo net.bridge.bridge-nf-call-ip6tables = 1 > /etc/sysctl.d/k8s.conf
    echo net.bridge.bridge-nf-call-iptables = 1 >> /etc/sysctl.d/k8s.conf
    sysctl -p /etc/sysctl.d/k8s.conf
    

    安装k8s官方包

    1. 安装依赖包
    yum install socat
    
    1. 安装k8s相关包 kubelet kubeadm kubectl kubernetes-cni
      这些包都需要装,kubeadm依赖其他三个包。
      安装v1.6.4版本:
    cd
    mkdir v1.6.4
    cd v1.6.4
    wget -c -r -np -nd -A *.rpm http://10.195.156.81:8888/kubenetes/v1.6.4/
    rpm -ivh *.rpm
    
    1. 修改配置
      在启动kubelet之前我们需要先修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,为kubelet添加一个额外的参数如下,这样kubelet可以直接到私有仓库拉取pause-amd64:3.0镜像
      --pod-infra-container-image=docker-registry:5000/gcr.io/google_containers/pause-amd64:3.0

    也可以执行如下命令自动替换:

    cd /etc/systemd/system/kubelet.service.d/
    \cp -vf 10-kubeadm.conf 10-kubeadm.conf.bak
    grep "KUBELET_EXTRA_ARGS " 10-kubeadm.conf || perl -p -i -e "s/KUBELET_EXTRA_ARGS/KUBELET_EXTRA_ARGS --pod-infra-container-image=docker-registry:5000\/gcr.io\/google_containers\/pause-amd64:3.0/" 10-kubeadm.conf
    

    以上所有操作在所有集群节点上执行

    1. 初始化master节点,用到的镜像通过私有仓库提供
      v1.6.4初始化:
    export KUBE_REPO_PREFIX=docker-registry:5000/gcr.io/google_containers \
    KUBE_HYPERKUBE_IMAGE=docker-registry:5000/gcr.io/google_containers/hyperkube-amd64:v1.6.4 \
    KUBE_DISCOVERY_IMAGE=docker-registry:5000/gcr.io/google_containers/kube-discovery-amd64:1.0 \
    KUBE_ETCD_IMAGE=docker-registry:5000/gcr.io/google_containers/etcd-amd64:3.0.17
    kubeadm init --pod-network-cidr="10.24.0.0/16" --kubernetes-version=v1.6.4 --apiserver-advertise-address=10.198.66.242
    

    ==对接外部etcd集群==

    # file: deploy.yaml
    apiVersion: kubeadm.k8s.io/v1alpha1
    kind: MasterConfiguration
    #kubernetesVersion: "stable-1.7"
    kubernetesVersion: "stable-1.6"
    api:
      advertiseAddress: 10.202.4.169
      bindPort: 8080
    etcd:
      endpoints:
      - http://10.202.4.169:2379
    # 这个取决于kube-flannel.yml文件中定义的net-conf.json里的
    networking:
      podSubnet: 172.28.0.0/14
    
    export KUBE_REPO_PREFIX=docker-registry:5000/gcr.io/google_containers \
    KUBE_HYPERKUBE_IMAGE=docker-registry:5000/gcr.io/google_containers/hyperkube-amd64:v1.6.4 \
    KUBE_DISCOVERY_IMAGE=docker-registry:5000/gcr.io/google_containers/kube-discovery-amd64:1.0
    
    kubeadm init --config deploy.yaml
    

    5、配置权限访问apiserver
    为了使用kubectl访问apiserver,在~/.bashrc中追加下面的环境变量:

    export KUBECONFIG=/etc/kubernetes/admin.conf
    source ~/.bashrc
    

    此时kubectl命令在master node上就好用了,查看一下当前机器中的Node:

    kubectl get nodes
    

    安装Pod Network

    1、安装flannel network

    # 其中镜像 quay.io/coreos/flannel:v0.7.1-amd64 已经是最新的
    kubectl create -f  kubenetes/kube-flannel-yaml/kube-flannel-rbac.yml
    kubectl apply -f  kubenetes/kube-flannel-yaml/kube-flannel.yml
    

    2、查看确保所有的Pod都处于Running状态。

    kubectl get pod --all-namespaces -o wide
    

    五、使master node参与工作负载
    使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载。
    可以使用下面的命令使Master Node参与工作负载:

    kubectl taint nodes --all node-role.kubernetes.io/master-
    

    六、添加其他节点
    1、可以先测试一下DNS是否可用

    2、添加节点
    在其他主机上直接执行如下操作即可:

    kubeadm join --token 14cc9d.cb2d9fef16a2fb86 10.202.145.86:6443
    

    ==独立部署kubelet,不使用CNI,不操作iptables,不调度非openstack服务==

    # 预先拷贝认证文件/etc/kubernetes/pki/ca.crt
    # 预先拷贝配置文件(指定了server)/etc/kubernetes/kubelet.conf
    # 这个配置文件的内容还需要再考虑一下,是否可以去掉这个, 直接使用--api-servers
    
    kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --network-plugin=kubenet  --authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt --cgroup-driver=systemd --pod-cidr=169.254.169.0/24 --register-with-taints="openstack=ture:NoSchedule"
    

    做上述安装后,系统的iptables如下:

    # Generated by iptables-save v1.4.21 on Tue Aug 22 16:45:37 2017
    *filter
    :INPUT ACCEPT [450:65525]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [285:65520]
    :KUBE-FIREWALL - [0:0]
    -A INPUT -j KUBE-FIREWALL
    -A OUTPUT -j KUBE-FIREWALL
    -A KUBE-FIREWALL -m comment --comment "kubernetes firewall for dropping marked packets" -m mark --mark 0x8000/0x8000 -j DROP
    COMMIT
    # Completed on Tue Aug 22 16:45:37 2017
    # Generated by iptables-save v1.4.21 on Tue Aug 22 16:45:37 2017
    *nat
    :PREROUTING ACCEPT [0:0]
    :INPUT ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    :KUBE-MARK-DROP - [0:0]
    :KUBE-MARK-MASQ - [0:0]
    :KUBE-POSTROUTING - [0:0]
    -A POSTROUTING -m comment --comment "kubernetes postrouting rules" -j KUBE-POSTROUTING
    -A POSTROUTING ! -d 10.0.0.0/8 -m comment --comment "kubenet: SNAT for outbound traffic from cluster" -m addrtype ! --dst-type LOCAL -j MASQUERADE
    -A KUBE-MARK-DROP -j MARK --set-xmark 0x8000/0x8000
    -A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000
    -A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x4000/0x4000 -j MASQUERADE
    COMMIT
    # Completed on Tue Aug 22 16:45:37 2017
    

    前提条件:安装依赖环境到之前安装步骤的三.3

    安装Dashboard

    1、安装

    kubectl create -f kubenetes/kubernetes-dashboard-v1.6.1.yaml
    

    2、安装Heapster为集群添加使用统计和监控功能,为Dashboard添加仪表盘

    kubectl create -f  kubenetes/heapster-master-2ca8178a/rbac/heapster-rbac.yaml
    kubectl create -f kubenetes/heapster-master-2ca8178a/influxdb/grafana.yaml
    kubectl create -f kubenetes/heapster-master-2ca8178a/influxdb/heapster.yaml
    kubectl create -f kubenetes/heapster-master-2ca8178a/influxdb/influxdb.yaml
    

    3、通过proxy方式启动
    kubectl proxy --address='' --accept-hosts='.+' &

    相关文章

      网友评论

          本文标题:kubeadm安装k8s 1.6.4

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