zoukankan      html  css  js  c++  java
  • k8s集群安装-master和node

    架构:1台master、3台node

    关闭防火墙、selinux、NetworkManager、postfix
    安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2

    一、etcd安装
    etcd安装在master节点,centos7原有镜像没有etcd包,因此需要使用其他镜像
    在/etc/yum.repo目录下wget http://mirrors.aliyun.com/repo/ Centos-7.repo
    (-c断点续传, -O下载并重命名wget -O newname url)
    yum install -y etcd

    修改配置文件
    /etc/etcd/etcd.conf
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #ip修改为0.0.0.0
    ETCD_ADVERTISE_CLIENT_URLS="http://192.168.85.30:2379" #ip修改为master ip

    启动etcd服务并设置为开机自启
    systemctl start etcd
    systemctl enable etcd
    [root@master etcd]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 5045/etcd
    tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 689/rpcbind
    tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1391/dnsmasq
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd
    tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 995/cupsd
    tcp6 0 0 :::2379 :::* LISTEN 5045/etcd
    监听任意的2379端口和本机的2380端口
    2379端口对外提供服务,k8s向etcd写数据使用2379端口,etcd集群之间数据同步使用2380端口

    二、master安装
    [root@master etcd]# yum -y install kubernetes-master.x86_64
    会同时安装kubernetes-master和kubernetes-client

    [root@master kubernetes]# ls
    apiserver config controller-manager scheduler

    修改apiserver配置文件,/etc/kubernetes/apiserver
    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" #ip修改为0.0.0.0
    KUBE_API_PORT="--port=8080" #去掉注释
    KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.85.30:2379" #ip修改为master ip
    KUBELET_PORT="--kubelet-port=10250" #去掉注释

    修改controller-manager和scheduler配置文件,两者共用配置文件/etc/kubernetes/config(proxy也在该文件配置)
    KUBE_MASTER="--master=http://192.168.85.30:8080" # ip修改为master ip

    启动kube-apiserver、kube-controller-manager和kube-scheduler服务并设置为开机自启
    [root@master kubernetes]# systemctl start kube-apiserver
    [root@master kubernetes]# systemctl start kube-controller-manager
    [root@master kubernetes]# systemctl start kube-scheduler
    [root@master kubernetes]# systemctl enable kube-apiserver
    Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service.
    [root@master kubernetes]# systemctl enable kube-controller-manager
    Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service.
    [root@master kubernetes]# systemctl enable kube-scheduler
    Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.

    检查master状态
    [root@master kubernetes]# kubectl get componentstatus
    NAME STATUS MESSAGE ERROR
    scheduler Healthy ok
    controller-manager Healthy ok
    etcd-0 Healthy {"health":"true"}


    三、node安装(注意master也用作node节点)
    [root@master ~ ]# yum -y install kubernetes-node.x86_64 (安装过程很慢,如果下载失败可尝试几次)
    安装node时会自动装上docker

    修改proxy配置文件,/etc/kubernetes/config
    KUBE_MASTER="--master=http://192.168.85.30:8080" # ip修改为master ip

    修改kubelet配置文件,/etc/kubernetes/kubelet
    KUBELET_ADDRESS="--address=192.168.85.31" #ip修改为各node节点的ip
    KUBELET_PORT="--port=10250" #去掉注释
    KUBELET_HOSTNAME="--hostname-override=node1" #各node节点的主机名(需要配置host解析并且主机名唯一),也可以写ip
    KUBELET_API_SERVER="--api-servers=http://192.168.85.30:8080" #ip修改为master ip

    启动kubelet、kube-proxy服务
    [root@master kubernetes]# systemctl start kubelet #kubelet启动时会启动docker
    [root@master kubernetes]# systemctl start kube-proxy
    [root@master kubernetes]# systemctl enable kubelet
    [root@master kubernetes]# systemctl enable kube-proxy

    在master上查看node节点状态
    [root@master kubernetes]# kubectl get nodes
    NAME STATUS AGE
    master Ready 7m
    node1 Ready 5m
    node2 Ready 4m


    四、flannel网络插件安装(所有节点上,实现跨宿主机容器之间的通讯)
    yum install -y flannel

    修改flannel配置文件,/etc/sysconfig/flanneld
    FLANNEL_ETCD_ENDPOINTS="http://192.168.85.30:2379" #ip修改为etcd ip即master ip
    FLANNEL_ETCD_PREFIX="/atomic.io/network" #无需修改,粘贴出来是为了下一步设置key

    设置etcd的key(只在etcd即master上设置)
    [root@master sysconfig]# etcdctl set /atomic.io/network/config '{ "Network":"172.16.0.0/16" }'
    [root@master sysconfig]# systemctl start flanneld
    [root@master sysconfig]# systemctl enable flanneld
    此时通过ifconfig可查看多了一个flannel0网卡,网卡地址在设置的Network中随机分配,但是与docker0网卡地址段不同,需要重启docker服务使flannel0网卡和docker0地址段相同

    [root@master sysconfig]# systemctl enable docker

    启动node节点的flanneld服务、重启node节点docker服务
    每个节点上的flannel0网卡和docker0网卡地址段相同,但是各个节点上的地址段是不同的,我的三个节点最后分别是.2、.28、.51网段

    [root@master ~]# ifconfig
    docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 172.16.2.1  netmask 255.255.255.0  broadcast 0.0.0.0
            ether 02:42:11:f5:e4:6b  txqueuelen 0  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.85.30  netmask 255.255.255.0  broadcast 192.168.85.255
            inet6 fe80::20c:29ff:fe8d:2852  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:8d:28:52  txqueuelen 1000  (Ethernet)
            RX packets 236138  bytes 169924220 (162.0 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 149103  bytes 60479160 (57.6 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1472
            inet 172.16.2.0  netmask 255.255.0.0  destination 172.16.2.0
            inet6 fe80::212c:461d:d5ad:b79c  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
    ……

    以busybox镜像为例,先docker search 镜像名称 搜索,结果如下,OFFICIAL为ok的为官方镜像

    [root@master ~]# docker search busybox
    INDEX       NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/busybox                   Busybox base image.                             1977      [OK]       
    docker.io   docker.io/progrium/busybox                                                          71                   [OK]
    docker.io   docker.io/radial/busyboxplus        Full-chain, Internet enabled, busybox made...   32                   [OK]
    docker.io   docker.io/yauritux/busybox-curl     Busybox with CURL                               10                   
    docker.io   docker.io/arm32v7/busybox           Busybox base image.                             8                    
    docker.io   docker.io/armhf/busybox             Busybox base image.                             6                    
    docker.io   docker.io/odise/busybox-curl                                                        4                    [OK]
    docker.io   docker.io/arm64v8/busybox           Busybox base image.                             3                    
    docker.io   docker.io/aarch64/busybox           Busybox base image.                             2……                                                       0                    

    通过dokcer pull 镜像名称下载镜像,再通过docker images查看镜像

    [root@master ~]# docker pull docker.io/busybox
    Using default tag: latest
    Trying to pull repository docker.io/library/busybox ... 
    latest: Pulling from docker.io/library/busybox
    61c5ed1cbdf8: Pull complete 
    Digest: sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977
    Status: Downloaded newer image for docker.io/busybox:latest
    [root@master ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/busybox   latest              018c9d7b792b        4 weeks ago         1.22 MB

     docker run -it 镜像名称 进入容器

    [root@master ~]# docker run -it busybox
    / # ifconfig
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:10:02:02  
              inet addr:172.16.2.2  Bcast:0.0.0.0  Mask:255.255.255.0
              inet6 addr: fe80::42:acff:fe10:202/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1472  Metric:1
              RX packets:24 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:2626 (2.5 KiB)  TX bytes:648 (648.0 B)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    / # ping 172.16.28.2
    PING 172.16.28.2 (172.16.28.2): 56 data bytes
    ^z

    在容器内查看ip后互ping,发现各节点间无法ping通,这是因为docker在1.13版本之后将iptables的Chain FORWARD的策略设置为了drop,需要修改为accept才可
    [root@master sysconfig]# iptables -P FORWARD ACCEPT #修改策略
    [root@master sysconfig]# iptables -L -n #查看策略

    [root@master ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    KUBE-FIREWALL  all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    DOCKER-ISOLATION  all  --  0.0.0.0/0            0.0.0.0/0           
    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    
    Chain OUTPUT (policy ACCEPT)
    ……

    为防止重启后失效,将策略写入docker的启动文件/usr/lib/systemd/system/docker.service
    Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
    ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT #增加这一行
    ExecStart=/usr/bin/dockerd-current
    然后重新加载systemctl daemon-reload



    ---------------------------------------------------------------------------------------------------------------------------------------------

    准备三台虚拟机,一台做master,两台做node节点。

    一.安装docker,两node节点上进行

    1.虚拟机挂载centos7镜像,挂载到/mnt目录;修改主机名;配置静态ip;配置hosts解析;配置/etc/resolve.conf,nameserver 8.8.8.8;关闭selinux,关闭防火墙

    2.安装docker依赖包:yum -y install yum-utils device-mapper-persistent-data lvm2

    3.安装wget:yum install -y wget

    4.在/etc/yum.repos.d/目录下,wget  https://download.docker.com/linux/centos/docker-ce.repo,会将指定目录下的docker-ce.repo下载到当前目录

    5.通过yum list docker-ce --showduplicates | sort -r查看所有可用版本

    5.yum -y install docker-ce,会根据docker.ce从官方下载最新docker并安装

    6.启动docker:systemctl start docker,设置开机自启动docker: systemctl enable docker

    7.可通过docker info查看安装的docker信息

    二.安装证书,master上

    1.进入/usr/local/bin目录下,下载三个cfssl工具文件用于生成证书:

     wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

     wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

     wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

    https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

  • 相关阅读:
    SpringBoot与quartz集成
    SpringBoot 中使用 @Valid 注解 + Exception 全局处理器优雅处理参数验证
    搭建Redis集群和MySQL主从同步
    scanf_s读取键盘输入字符串失败
    含有通配符*的字符匹配(C语言)
    人之患
    TCP socket编程记录(C语言)
    程序变量命名规范(个人)
    h lib dll文件相关部分
    关于inet_ntop、inet_pton中的n和p分别代表的意义
  • 原文地址:https://www.cnblogs.com/Forever77/p/10702489.html
Copyright © 2011-2022 走看看