• K8S集群搭建——基于CentOS 7系统


    引用地址:https://blog.csdn.net/u010039418/article/details/90235873

    1、首先感谢大牛分享

    环境准备
    集群数量此次使用3台CentOS 7系列机器,分别为7.3,7.4,7.5

    节点名称 节点IP
    master 192.168.0.100
    node1 192.168.0.101
    node2 192.168.0.102
    主要事项
    1、master节点安装配置etcd服务,作为k8s集群主数据库,保存所有资源的信息
    2、所有节点安装配置k8s服务,针对master和node分别配置各项服务
    3、所有节点安装配置flannel服务,用于跨主机容器间通信

    前提
    关闭防火墙,否则节点间无法通信,使用以下命令关闭防火墙和禁止开机启动。

    systemctl stop firewalld.service
    systemctl disable firewalld.service
    1
    2
    master节点安装配置etcd
    安装采用yum方式,并且只是安装单机的etcd服务,如果考虑高可用需要部署etcd集群。

    yum install -y etcd
    1
    安装完成后,/etc/etcd/etcd.conf配置文件作如下配置,

    ETCD_NAME="master"
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
    ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.100:2379"

    1
    2
    3
    4
    5
    其中,

    ETCD_NAME:节点名称
    ETCD_DATA_DIR:数据存储目录
    ETCD_LISTEN_CLIENT_URLS:与客户端(etcdctl、curl)通信时的监听地址列表
    ETCD_ADVERTISE_CLIENT_URLS:对外公告的该节点客户端监听地址
    配置完启动etcd服务,并配置开机启动,

    systemctl start etcd
    systemctl enable etcd
    1
    2
    查看etcd健康状态,确定etcd服务状态正常,

    [root@master~]# etcdctl cluster-health
    member 8e9e05c52164694d is healthy: got healthy result from http://192.168.0.100:2379
    cluster is healthy
    1
    2
    3
    所有节点安装配置K8S
    1、master节点

    在master节点机器上安装k8s,同样使用yum方式,

    yum install -y kubernetes
    1
    在k8s master节点上需要运行以下组件:

    Kubernetes API Server:提供http restful接口服务,也是集群控制入口
    Kubernetes Controller Manager:资源对象控制中心
    Kubernetes Scheduler:负责pod的调度
    配置kube-apiserver服务,修改/etc/kubernetes/apiserver文件如下:

    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
    KUBE_API_PORT="--port=8080"
    KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.100:2379"
    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
    KUBE_API_ARGS=""
    1
    2
    3
    4
    5
    6
    其中,

    KUBE_API_ADDRESS:配置apiserver服务绑定的不安全ip
    KUBE_API_PORT:配置apiserver服务端口,默认情况下,8080用于接收http请求,6443用于接收https请求
    KUBE_ETCD_SERVERS:配置etcd服务ip
    KUBE_SERVICE_ADDRESSES:配置集群使用的虚拟IP池
    KUBE_ADMISSION_CONTROL:配置RESTFUL API 准入选项
      
    修改/etc/kubernetes/config文件如下:
    KUBE_LOGTOSTDERR="--logtostderr=true"
    KUBE_LOG_LEVEL="--v=0"
    KUBE_ALLOW_PRIV="--allow-privileged=false"
    KUBE_MASTER="--master=http://192.168.0.100:8080"
    1
    2
    3
    4
    其中,

    KUBE_LOGTOSTDERR:设置日志输出
    KUBE_LOG_LEVEL:设置日志级别
    KUBE_ALLOW_PRIV:设置是否允许特权
    KUBE_MASTER:设置master节点apiserver地址
    除了KUBE_MASTER需要配置,其余均保持默认设置即可。

    对于kube-controller-manager和kube-scheduler两个服务,无需其他配置,按照系统默认参数即可。

    设置kube-apiserver、kube-controller-manager和kube-scheduler服务开启启动,并启动服务,

    systemctl enable kube-apiserver kube-controller-manager kube-scheduler
    systemctl start kube-apiserver kube-controller-manager kube-scheduler
    1
    2
    2、node节点

    在node节点机器上安装k8s,仍然使用yum方式,

    yum install -y kubernetes
    1
    对于node节点,需要运行以下组件

    kubelet:负责pod上容器的创建、启停,并与master节点共同实现集群管理
    kube-proxy:实现服务的通信和负载均衡
    上面我们提到,node也需要安装kubernetes,因此我们直接开始配置。

    配置kubelet,修改/etc/kubernetes/kubelet文件如下:

    KUBELET_ADDRESS="--address=0.0.0.0"
    KUBELET_HOSTNAME="--hostname-override=192.168.52.145"
    KUBELET_API_SERVER="--api-servers=http://192.168.52.136:8080"
    KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
    KUBELET_ARGS=""
    1
    2
    3
    4
    5
    其中,

    KUBELET_ADDRESS:设置kubelet绑定ip
    KUBELET_HOSTNAME:设置当前节点的hostname,记得不要重复了
    KUBELET_API_SERVER:设置master上apiserver的ip地址
    KUBELET_POD_INFRA_CONTAINER:设置基础镜像拉取地址,如果访问不了换个国内的地址
    修改/etc/kubernetes/config文件如下:

    KUBE_LOGTOSTDERR="--logtostderr=true"
    KUBE_LOG_LEVEL="--v=0"
    KUBE_ALLOW_PRIV="--allow-privileged=false"
    KUBE_MASTER="--master=http://192.168.0.100:8080"
    1
    2
    3
    4
    该配置和master节点上相同。

    kube-proxy服务无需其他配置。

    启动kubelet、kube-proxy服务,并设置为开启动,

    systemctl start kubelet kube-proxy
    systemctl enable kubelet kube-proxy
    1
    2
    同样的操作在另一个节点配置。如果节多,可以考虑使用ansible批量部署。

    部署完node节点,我们就能在master上查看节点信息了。

    [root@master ~]# kubectl get node
    NAME STATUS AGE
    192.168.0.101 Ready 11s
    192.168.0.102 Ready 8s
    1
    2
    3
    4
    所有节点安装配置flannel
    flannel的安装是为了解决跨主机容器间的通信。

    1、在master和node节点上执行以下操作

    安装flannel

    yum install -y flannel
    1
    修改配置文件/etc/sysconfig/flanneld如下,

    FLANNEL_ETCD_ENDPOINTS="http://192.168.0.100:2379"
    FLANNEL_ETCD_PREFIX="/flannel/network"
    1
    2
    其中,

    FLANNEL_ETCD_ENDPOINTS:设置etcd的访问URL
    FLANNEL_ETCD_PREFIX:设置etcd变量前缀
    2、在master节点上添加网络

    master上配置有etcd服务,因此我们使用etcdctl命令设置该集群的网络信息。

    etcdctl set /flannel/network/config '{"Network":"10.8.0.0/16"}'
    1
    其中,/flannel/network/和上面的FLANNEL_ETCD_PREFIX对应。

    3、重启master和node节点上各个服务

    由于flannel会将docker0覆盖,因此需要重启docker服务。

    对于master,

    systemctl restart docker kube-apiserver kube-controller-manager kube-scheduler
    1
    对于node,

    systemctl restart kube-proxy kubelet docker
    1
    4、所有节点启动flannel服务,并设置开启启动

    systemctl restart flanneld
    systemctl enable flanneld
    1
    2
    启动后就能看到节点上的flannel网络,并且该网络正是我们配置的ip范围。
    master节点上flannel信息,

    [root@master ~]# ifconfig flannel0
    flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
    inet 10.8.71.0 netmask 255.255.0.0 destination 10.8.71.0
    inet6 fe80::186f:8899:a84e:d447 prefixlen 64 scopeid 0x20<link>
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 3 bytes 144 (144.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    node1节点上flannel信息,

    [root@node1 ~]# ifconfig flannel0
    flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
    inet 10.8.21.0 netmask 255.255.0.0 destination 10.8.21.0
    inet6 fe80::8597:702b:ee1a:db51 prefixlen 64 scopeid 0x20<link>
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 3 bytes 144 (144.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    总结
    其实到这,k8s的集群就搭建完了,但这只是最简单的一个集群,并没有考虑集群的高可用。

    因此,实际的集群还需要以下操作:

    针对etcd进行集群化,保证高可用
    针对master节点进行扩充,避免单点故障
    后面有时间我们慢慢说。
    ————————————————
    版权声明:本文为CSDN博主「Blue summer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010039418/article/details/90235873

  • 相关阅读:
    MD5验签同一字符串得到不同的MD5签名值可能问题之一
    Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法
    SVN Error: Unreadable path encountered; access denied;
    2018年终个人总结
    ant编译无法依赖rt.jar
    ORA-00980: 同义词转换不再有效
    二叉树的深度和广度优先遍历
    Missing HTTP Strict-Transport-Security Header (HSTS) 解决
    单例模式
    sql 替换字段中部分内容
  • 原文地址:https://www.cnblogs.com/honghong75042/p/15294308.html
Copyright © 2020-2023  润新知