容器方式部署k8s集群

初始化系统

    1. 环境
     k8s1 192.168.138.162 k8s2 192.168.138.163
     k8s3 192.168.138.1642. 设置系统主机名以及 Host 文件的相互解析
     分别给三台主机设置主机名为:k8s1、k8s2、k8s3
     添加三台主机hosts相互解析vim /etc/hosts
     192.168.138.162 k8s1
     192.168.138.163 k8s2
     192.168.138.164 k8s33. 安装依赖包和常用工具
     yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git4. 设置防火墙为 Iptables 并设置空规则
     systemctl stop firewalld && systemctl disable firewalld yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save5. 关闭selinux和交换分区
     swapoff -a && sed -i ‘/ swap / s/^(.)$/#\1/g’ /etc/fstab
     setenforce 0
     && sed -i 's/^SELINUX=./SELINUX=disabled/’ /etc/selinux/config6. 调整内核参数,对于 K8S
     vim kubernetes.conf
     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 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
     vm.overcommit_memory=1 # 不检查物理内存是否够用
     vm.panic_on_oom=0 # 开启 OOM
     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
     cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
     sysctl -p /etc/sysctl.d/kubernetes.conf7. 调整系统时区
     #设置系统时区为 中国/上海
     timedatectl set-timezone Asia/Shanghai
     #将当前的 UTC 时间写入硬件时钟
     timedatectl set-local-rtc 0
     #重启依赖于系统时间的服务
     systemctl restart rsyslog
     systemctl restart crond8. 关闭系统不需要服务
     systemctl stop postfix && systemctl disable postfix9. 设置 rsyslogd 和 systemd journald
     mkdir /var/log/journal # 持久化保存日志的目录
     mkdir /etc/systemd/journald.conf.d
     vim /etc/systemd/journald.conf.d/99-prophet.conf
     [Journal]
     #持久化保存到磁盘
     Storage=persistent
     #压缩历史日志
     Compress=yes
     SyncIntervalSec=5m
     RateLimitInterval=30s
     RateLimitBurst=1000
     #最大占用空间 10G
     SystemMaxUse=10G
     #单日志文件最大 200M
     SystemMaxFileSize=200M
     #日志保存时间 2 周
     MaxRetentionSec=2week
     #不将日志转发到 syslog
     ForwardToSyslog=no
     systemctl restart systemd-journald10. 升级系统内核为 4.44
     CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如:rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm#安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装 一次!
     yum --enablerepo=elrepo-kernel install -y kernel-lt
     #设置开机从新内核启动
     grub2-set-default ‘CentOS Linux (4.4.232-1.el7.elrepo.x86_64) 7 (Core)’开始安装
    1. kube-proxy开启ipvs的前置条件
     modprobe br_netfilter
     vim /etc/sysconfig/modules/ipvs.modules
     #!/bin/bash
     modprobe – ip_vs
     modprobe – ip_vs_rr
     modprobe – ip_vs_wrr
     modprobe – ip_vs_sh
     modprobe – nf_conntrack_ipv4
     chmod 755 /etc/sysconfig/modules/ipvs.modules
     bash /etc/sysconfig/modules/ipvs.modules
     lsmod | grep -e ip_vs -e nf_conntrack_ipv42. 安装 Docker 软件,导入镜像
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum update -y && yum install -y docker-ce
     mkdir /etc/docker
     mkdir -p /etc/systemd/system/docker.service.d
     vim /etc/docker/daemon.json
     {
     “exec-opts”: [“native.cgroupdriver=systemd”],
     “log-driver”: “json-file”,
     “log-opts”: {
     “max-size”: “100m”
     }
     }
     systemctl daemon-reload
     systemctl restart docker
     systemctl enable docker
     vim load-images.sh
     #!/bin/bash
     ls /root/kubeadm-basic.images > /tmp/image-list.txt
     cd /root/kubeadm-basic.images
     for i in $( cat /tmp/image-list.txt)
     do
     docker load -i $i
     done
     rm -rf /tmp/image-list.txt
     chmod +x load-images.sh
     执行load-images.sh脚本
     镜像资料https://pan.baidu.com/s/1HeO2flWYuYQMFV7BOmkusw
     密码:w6bx
     3. 安装 Kubeadm (主从都配置)
     vim /etc/yum.repos.d/kubernetes.repo
     [kubernetes]
     name=Kubernetes
     baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
     enabled=1
     gpgcheck=0
     repo_gpgcheck=0
     gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
     yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
     systemctl enable kubelet.service
     4. 初始化主节点并加入节点
     这里以k8s1为主节点,k8s2和k8s3为从节点。只需要在主节点作 初始化
     kubeadm config print init-defaults > kubeadm-config.yaml
    vim kubeadm-config.yaml
    按照这些信息修改添加
    localAPIEndpoint:
    	advertiseAddress: 192.168.138.162
    kubernetesVersion: v1.15.1
    networking:
    	podSubnet: "10.244.0.0/16"
    	serviceSubnet: 10.96.0.0/12
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    featureGates:
    	SupportIPVSProxyMode: true
    mode: ipvs

    最后指定配置文件,执行初始化

    kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

    初始化成功后会将日志信息打印在终端和kubeadm-init.log中

    执行相应的命令加入主节点和从节点,加入从节点时需要执行

    echo 1 >/proc/sys/net/ipv4/ip_forward

    容器部署项目机器 准备项目路径项目代码和数据文件等 容器部署方式_kubernetes


    添加成功后可以查看节点信息

    kubectl get node

    此时的状态为NotReady,是正常的

    容器部署项目机器 准备项目路径项目代码和数据文件等 容器部署方式_docker_02


    创建一个目录专门存放k8s的重要文件

    Mkdir file-k8s

    mv kubeadm-init.log kubeadm-config.yaml file-k8s

    在file-k8s中创建core flannel 目录

    mkdir file-k8s/core file-k8s/flannel

    5. 部署网络

    下载flannel的yaml文件

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube- flannel.yml //这个下载需要国外网络

    这里有现成的链接:https://pan.baidu.com/s/1ZwfldybqbhJr-iZFB35TtA

    提取码:qdwd

    下载下来放在file-k8s/flannel目录中

    Kubectl create -f kube-flannel.yml

    如果安装flannel失败执行删除 kubectl delete -f kube-flannel.yml

    成功之后可以看见所有状态均为ready

    Kubectl get pod -n kube-system 查看pod,node全部ready

    容器部署项目机器 准备项目路径项目代码和数据文件等 容器部署方式_初始化_03


    容器部署项目机器 准备项目路径项目代码和数据文件等 容器部署方式_docker_04


    Kubectl get pod -n kube-system -o wide 查看更详细的信息

    kubectl get pod -o wide --show-labels查看标签

    至此k8s集群已经部署完毕