美文网首页
k8s环境部署

k8s环境部署

作者: 妞儿是只猫 | 来源:发表于2020-06-12 16:07 被阅读0次

    上一节开篇,废话了很多,这篇咱们直接进入主题,搞一个k8s学习环境。

    由于官方上推荐初学者学习minikube这个环境,由于这东西基本是一键部署,本人还是想了解一下各个组件之间的安装以及各配置文件如何修改,所以决定搭建传统的k8s集群环境。

    本人的计算机资源有限,目前只搭建了1 k8s-master节点、1 etcd节点,以及2个node节点,搭建步骤如下:

    # 一、环境准备

    ## 1、机器环境

    节点CPU核数必须是 :>= 2核 ,否则k8s无法启动

    DNS网络: 最好设置为 本地网络连通的DNS,否则网络不通,无法下载一些镜像

    linux内核: linux内核必须是 4 版本以上,因此必须把linux核心进行升级

    准备3台虚拟机环境,或者是3台阿里云服务器都可。

    k8s-master01:  此机器用来安装k8s-master的操作环境

    k8s-master01: 此机器用来安装etcd环境(资源有限,和master供用一个宿主机)

    k8s-node01: 此机器用来安装k8s node节点的环境

    k8s-node02: 此机器用来安装k8s node节点的环境

    ## 2、依赖环境

    #1、给每一台机器设置主机名

    hostnamectl set-hostname k8s-master01

    hostnamectl set-hostname k8s-node01

    hostnamectl set-hostname k8s-node02

    #查看主机名

    hostname

    #配置IP host映射关系

    vi /etc/hosts

    192.168.202.132 k8s-master01

    192.168.202.133 k8s-node01

    192.168.202.134 k8s-node02

    202.106.0.20

    #2、安装依赖环境,注意:每一台机器都需要安装此依赖环境

    yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc

    #3、安装iptables,启动iptables,设置开机自启,清空iptables规则,保存当前规则到默认规则

    # 关闭防火墙

    systemctl stop firewalld && systemctl disable firewalld

    # 置空iptables

    yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

    #4、关闭selinux

    #闭swap分区【虚拟内存】并且永久关闭虚拟内存

    swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

    #关闭selinux

    setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

    #5、升级Linux内核为4.44版本

    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

    #安装内核

    yum --enablerepo=elrepo-kernel install -y kernel-lt

    #设置开机从新内核启动

    grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'

    #注意:设置完内核后,需要重启服务器才会生效。

    #查询内核

    uname -r

    #########################################################################

    #6、调整内核参数,对于k8s

    cat > kubernetes.conf <<EOF

    net.bridge.bridge-nf-call-iptables=1

    net.bridge.bridge-nf-call-ip6tables=1

    net.ipv4.ip_forward=1

    net.ipv4.tcp_tw_recycle=0

    vm.swappiness=0

    vm.overcommit_memory=1

    vm.panic_on_oom=0

    fs.inotify.max_user_instances=8192

    fs.inotify.max_user_watches=1048576

    fs.file-max=52706963

    fs.nr_open=52706963

    net.ipv6.conf.all.disable_ipv6=1

    net.netfilter.nf_conntrack_max=2310720

    EOF

    #将优化内核文件拷贝到/etc/sysctl.d/文件夹下,这样优化文件开机的时候能够被调用

    cp kubernetes.conf /etc/sysctl.d/kubernetes.conf

    #手动刷新,让优化文件立即生效

    sysctl -p /etc/sysctl.d/kubernetes.conf

    #7、调整系统临时区 --- 如果已经设置时区,可略过

    #设置系统时区为中国/上海

    timedatectl set-timezone Asia/Shanghai

    #将当前的 UTC 时间写入硬件时钟

    timedatectl set-local-rtc 0

    #重启依赖于系统时间的服务

    systemctl restart rsyslog

    systemctl restart crond

    #7、关闭系统不需要的服务

    systemctl stop postfix && systemctl disable postfix

    #8、设置日志保存方式

    #1).创建保存日志的目录

    mkdir /var/log/journal

    #2).创建配置文件存放目录

    mkdir /etc/systemd/journald.conf.d

    #3).创建配置文件

    cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF

    [Journal]

    Storage=persistent

    Compress=yes

    SyncIntervalSec=5m

    RateLimitInterval=30s

    RateLimitBurst=1000

    SystemMaxUse=10G

    SystemMaxFileSize=200M

    MaxRetentionSec=2week

    ForwardToSyslog=no

    EOF

    #4).重启systemd journald的配置

    systemctl restart systemd-journald

    #9、打开文件数调整 (可忽略,不执行)

    echo "* soft nofile 65536" >> /etc/security/limits.conf

    echo "* hard nofile 65536" >> /etc/security/limits.conf

    #10、kube-proxy 开启 ipvs 前置条件

    modprobe br_netfilter

    cat > /etc/sysconfig/modules/ipvs.modules <<EOF

    #!/bin/bash

    modprobe -- ip_vs

    modprobe -- ip_vs_rr

    modprobe -- ip_vs_wrr

    modprobe -- ip_vs_sh

    modprobe -- nf_conntrack_ipv4

    EOF

    ##使用lsmod命令查看这些文件是否被引导

    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

    ```

    ## 3、搭建etcd部署

    #登录k8s-master01服务器

    ssh root@k8s-master01

    #下载etcd

    yum -y install etcd

    #配置config

    vi /etc/etcd/etcd.conf

    #设置如下

    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

    ETCD_ADVERTISE_CLIENT_URLS="http://k8s-master01:2379"

    #运行etcd

    #设置开机启动 且启动服务

    systemctl enable etcd && systemctl start etcd

    [root@localhost ~]# netstat -nlp | grep etcd

    tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 7130/etcd

    tcp6 0 0 :::2379

    #配置etcd内网信息

    #设置 (就像定义一个变量一样)

    etcdctl -C http://192.168.202.132:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

    #获取

    etcdctl -C http://192.168.202.132:2379 get /atomic.io/network/config

    {"Network":"172.17.0.0/16"}

    #注:

    172.17.0.0/16这个是节点主机Docker网卡的网段。

    /atomic.io/network/config类似定义的变量名,在节点机中Flanneld配置里的FLANNEL_ETCD_PREFIX项对应。

    ## 4、master服务器上安装服务

    #登录master服务器

    ssh root@k8s-master01

    #安装服务

    yum -y install kubernetes-master

    #配置config

    vi /etc/kubernetes/apiserver

    # 配置如下

    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

    KUBE_ETCD_SERVERS="--etcd-servers=http://k8s-master01:2379"

    #配置config

    vi  /etc/kubernetes/config

    #配置如下

    KUBE_MASTER="--master=http://k8s-master01:8080"

    #启动apiserver scheduler kuber-controller-manager 服务

    systemctl enable kube-apiserver kube-scheduler kube-controller-manager

    systemctl start kube-apiserver kube-scheduler kube-controller-manager

    [root@localhost ~]# netstat -nlpt | grep kube

    tcp6 0 0 :::6443 :::* LISTEN 15190/kube-apiserve

    tcp6 0 0 :::10251 :::* LISTEN 15191/kube-schedule

    tcp6 0 0 :::10252 :::* LISTEN 15192/kube-controll

    tcp6 0 0 :::8080 :::* LISTEN 15190/kube-apiserve

    #测试

    curl http://192.168.202.132:8080/version

    {

      "major": "1",

      "minor": "5",

      "gitVersion": "v1.5.2",

      "gitCommit": "269f928217957e7126dc87e6adfa82242bfe5b1e",

      "gitTreeState": "clean",

      "buildDate": "2017-07-03T15:31:10Z",

      "goVersion": "go1.7.4",

      "compiler": "gc",

      "platform": "linux/amd64"

    }

    #注:若创建pod认证失败

    #修改配置

    vi /etc/kubernetes/apiserver

    #修改如下文

    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

    在该行删除ServiceAccount SecurityContextDeny 这2个选项

    #重启服务

    systemctl restart kube-apiserver

    删除pod,重新创建

    ## 5、部署node服务器

    由于部署2个node节点,相同操作步骤,只是配置文件,稍作修改。以一个node节点为例。

    #登录k8s-node01节点

    ssh root@192.168.202.133

    #5.1安装docker

    yum -y install docker

    #开机自启 并启动

    systemctl enable docker  && systemctl start docker

    #修改config

    vi  /etc/docker/daemon.json

    #设置如下

    {"registry-mirrors": ["https://registry.docker-cn.com"]}

    #重启

    systemctl restart docker

    #查看仓库源是否设置成功

    docker info

    #5.2部署flannel

    #安装

    yum -y install flannel

    #修改配置

    vi /etc/sysconfig/flanneld

    #修改如下

    FLANNEL_ETCD_ENDPOINTS="http://k8s-master01:2379"

    FLANNEL_ETCD_PREFIX="/atomic.io/network"

    #开机自启并启动服务

    systemctl enable flanneld && systemctl restart flanneld

    netstat -nlp | grep flanneld

    udp        0      0 172.16.253.131:8285    0.0.0.0:* 

    #5.3安装k8s-node

    #安装服务

    yum -y install kubernetes-node

    #修改配置

    vi /etc/kubernetes/config

    #修改如下文

    KUBE_MASTER="--master=http://k8s-master01:8080"

    #修改配置

    vi /etc/kubernetes/kubelet

    #修改如下

    KUBELET_HOSTNAME="--hostname-override=k8s-node01"

    KUBELET_API_SERVER="--api-servers=http://k8s-master01:8080"

    #启动服务

    systemctl enable kubelet kube-proxy  && systemctl start kubelet kube-proxy

    netstat -ntlp | grep kube

    tcp        0      0 127.0.0.1:10248        0.0.0.0:*              LISTEN      7838/kubelet       

    tcp        0      0 127.0.0.1:10249        0.0.0.0:*              LISTEN      7842/kube-proxy   

    tcp        0      0 127.0.0.1:10250        0.0.0.0:*              LISTEN      7838/kubelet     

    tcp        0      0 127.0.0.1:10255        0.0.0.0:*              LISTEN      7838/kubelet       

    tcp6      0      0 :::4194                :::*                    LISTEN      7838/kubelet 

    #5.4可能存在的问题

    创建pod 节点若出现/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

    #解决方案

    yum install *rhsm* -y

    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

    rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

    docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

    ##6、验证

    #登录到master服务器上

    #查看节点信息

    kubectl get nodes

    NAME        STATUS    AGE

    k8s-node01  Ready    33m

    k8s-node02  Ready    33m

    相关文章

      网友评论

          本文标题:k8s环境部署

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