美文网首页
kubernetes集群搭建

kubernetes集群搭建

作者: 早_wsm | 来源:发表于2020-03-19 21:02 被阅读0次

    1、怎么来的

    • 发展经历
      iaas
      paas
      saas
      谷歌使用go语言开发,10年容器基础架构
      特点:
      轻量级
      弹性伸缩
      开源
      负载均衡
      适合人群:软件工程师,测试工程师,运维工程师

    • 2、知识图谱

    • Pod
      什么是Pod
      k8s网络通讯模式
      构建k8s集群

    • 资源清单

    • Pod的生命周期

    • 修改kubeadm 达到证书期限为10年

    • k8s高可用集群构建

    • 3、组件知识
      master内安装:

    etcd:相当于k8s集群的数据库
    api server:contoller manager(控制器服务)、scheduler(调度程序)

    node内安装:

    kubelet:调用docker
    kube-proxy:创建端口映射等

    二、准备搭建环境

    预先准备三台主机并做好域名解析:
    10.0.0.11 k8s-master 最小1G
    10.0.0.12 k8s-node-1 最小1G
    10.0.0.13 k8s-node-2 最小1G

    • 1.在k8s-master上做好配置
    #安装etcd组件
    yum install etcd -y
    #修改配置文件:
    vim /etc/etcd/etcd.conf 
    6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
    21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
    

    重新启动并设置为开机自启动
    systemctl restart etcd.service
    systemctl enable etcd.service
    查看端口:

    [root@master ~]# netstat -lntup |grep 2379
    tcp6       0      0 :::2379                 :::*                    LISTEN      2307/etcd 
    

    使用以下命令监控etcd集群是否健康:
    etcdctl -C http://10.0.0.11:2379 cluster-health
    显示结果:

    [root@master ~]# etcdctl -C http://10.0.0.11:2379 cluster-health
    member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.11:2379
    cluster is healthy
    
    • 2.在k8s-master上安装kubernetes

    kubernetes包含三个服务:
    apiserver 核心服务
    contoller manager
    scheduler

    #安装 kubernetes-master
    
    yum install -y kubernetes-master.x86_64
    
    #修改apiserver配置文件
    [root@k8s-master ~]# vim /etc/kubernetes/apiserver 
    8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
    11 KUBE_API_PORT="--port=8080"
    14 KUBELET_PORT="--kubelet-port=10250"
    17 KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
    23 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,
    SecurityContextDeny,ResourceQuota" #启用插件的名单,这里需要去掉ServiceAccount插件,否则会报错
    #修改kubernetes配置文件
    [root@k8s-master ~]# vim /etc/kubernetes/config
    22 KUBE_MASTER="--master=http://10.0.0.11:8080"
    

    分别重启三个服务并设置为开机自启:
    systemctl restart kube-apiserver.service
    systemctl enable kube-apiserver.service
    systemctl restart kube-controller-manager.service
    systemctl enable kube-controller-manager.service
    systemctl restart kube-scheduler.service
    systemctl enable kube-scheduler.service
    检查服务安装是否正常使用kubectl get componentstatus命令

    [root@master ~]# kubectl get componentstatus 
    NAME                 STATUS    MESSAGE             ERROR
    scheduler            Healthy   ok                  
    controller-manager   Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}  
    
    • 3.node节点安装kubernetes
      分别在俩台node节点安装kubernetes-node

    kubernetes-node包含俩个服务:
    kuberlet
    kube-Proxy

    #直接安装kubernetes-node
    yum install kubernetes-node.x86_64 -y
    #修改kubernetes配置文件-kube-proxy
    vim /etc/kubernetes/config 
    22行:KUBE_MASTER="--master=http://10.0.0.11:8080"
    ​#修改kubelet
    vim /etc/kubernetes/kubelet
    5行:KUBELET_ADDRESS="--address=0.0.0.0"
    8行:KUBELET_PORT="--port=10250"
    11行:KUBELET_HOSTNAME="--hostname-override=10.0.0.12"#分别修改为node1与node2的地址
    14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
    

    分别重启俩个服务
    systemctl enable kubelet.service
    systemctl restart kubelet.service
    systemctl enable kube-proxy.service
    systemctl restart kube-proxy.service
    可以看到docker也已经启动了
    systemctl status docker
    装好节点后在master验证使用命令kubectl get nodes结果可看到启动状态:

    [root@master ~]# kubectl get nodes
    NAME        STATUS    AGE
    10.0.0.12   Ready     5m
    10.0.0.13   Ready     1m
    
    • 4.为所有节点配置flannel网络
      为实现node节点容器可相互通信,需要配置flannel
    #为所有节点安装flannel
    
    yum install flannel -y
    #所有节点都需要修改etcd的连接地址
    
    sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld
    ```​
    ##master节点
    定义flannel网段范围:
    etcdctl mk /atomic.io/network/config   '{ "Network": "172.16.0.0/16" }'
    
    等下需要搭建一个docker仓库,这里直接使用master简直docker仓库任务,所以先安装docker再重启服务
    yum install docker -y
    systemctl enable flanneld.service 
    systemctl restart flanneld.service 
    service docker restart
    systemctl enable docker
    重新启动etcd内三个服务:
    systemctl restart kube-apiserver.service
    systemctl restart kube-controller-manager.service
    systemctl restart kube-scheduler.service
    ##node节点:
    systemctl enable flanneld.service 
    systemctl restart flanneld.service 
    service docker restart
    systemctl restart kubelet.service
    systemctl restart kube-proxy.service
    

    ​安装完成后验证各节点是否可以实现互相通讯
    为实现各节点内docker容器相互可以通讯,需要所有节点设置防火墙规则,并让生效,具体命令iptables -P FORWARD ACCEPT
    在各节点内修改配置文件实现运行容器时便启用防火墙规则

    vim /usr/lib/systemd/system/docker.service
    #在[Service]区域下增加一行
    ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
    

    各节点进行重启服务
    systemctl daemon-reload
    systemctl restart docker
    在每个节点内导入一个docker镜像并导入运行
    这里提供一个镜像用作运行测试,下载地址:
    链接:https://pan.baidu.com/s/1tF4EZ_qsu2o2YyzZde-7AQ
    提取码:9yg5
    所有节点执行docker load -i docker_busybox.tar.gz导入
    运行:docker run -it busybox
    最后可在各节点运行docker容器,相互ping一下,测试网络通讯是否成功

    image.png
    image.png
    image.png

    这样就通过flannel模式达到网络互通!

    相关文章

      网友评论

          本文标题:kubernetes集群搭建

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