⒈开启kube-proxy的ipvs的前置条件

  模式改为lvs调度的方式,kube-proxy主要解决的是svc(service)与pod之间的调度关系,ipvs的调度方式可以极大的增加它的访问效率,所以这种方式现在是我们必备的一种。

  1.加载netfilter模块

modprobe br_netfilter 

  2.编写一个引导文件,这个文件将会引导我们lvs的一些相关依赖的加载,注意这里的依赖并不是rpm包含,也是模块依赖

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

  3.赋予该文件755权限并执行该文件,然后使用lsmod命令查看这些文件是否被引导。

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

⒉安装Docker

  1.安装Docker相关依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

  2.导入阿里云Docker-ce的镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3.更新yum并安装Docker-ce

yum update -y && yum install -y docker-ce

  4.重启

reboot

  重启完成后我们之前在Centos设置默认的启动内核4.44将被恢复默认到3.10,因此我们需要再次设置一次并重启

grub2-set-default 'CentoS Linux(4.4.189-1.el7.elrepo.×86_64) 7 (Core)' && reboot

  查看当前使用的内核

uname -r

  5.启动Docker并设置为开机自启

systemctl start docker
systemctl enable docker

  6.配置daemon文件

cat > /etc/docker/daemon.json <<EOF 
{
    "registry-mirrors":["https://registry.docker-cn.com","https://kxv08zer.mirror.aliyuncs.com"],
    "exec-opts":["native.cgroupdriver=systemd"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"100m"
    }
}
EOF
  • exec-opts,设置默认的组为systemd,默认情况下Centos有两个组,一个fs,一个systemd管理的,为了统一化,我们交给systemd管理。
  • log-driver,让我们存储日志的方式改为json文件的形式
  • log-opts,存储最大为100Mb,这样我们可以在后期通过war/log/content/去查找对应的容器的日志信息,这样就可以在EFK里去搜索对应的信息
  • registry-mirrors,设置Docker镜像加速

  7.创建存储Docker配置文件的目录

mkdir -p /etc/systemd/system/docker.service.d

  8.重新读取配置文件并重启Docker

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

⒊安装Kubeadm(主从配置)

  1.导入阿里云yum仓库

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=
gpgcheck=
repo_gpgcheck=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

  2.安装kubeadm初始化工具,命令行管理工具,Docker交互工具

yum -y install kubeadm-1.16. kubectl-1.16. kubelet-1.16.

  3.设置kubelet开机自启

systemctl enable kubelet.service

  因为kubelet需要跟我们的容器接口进行交互,启动我们的容器,而我们的k8s通过kubeadm安装出来以后都是以pod的方式存在,也就是底层是以容器的方式运行,所以kubelet一定要是开机自启的,不然的话,重启以后k8s集群不会启动。

⒋初始化k8s主节点

  1.导入镜像

  初始化之前需要导入镜像

  kubeadm在初始化k8s集群的时候,会从GCE【谷歌云服务器】里去拉取镜像,并且这些镜像是相当大的,而且速度比较慢,最重要的是,萌新一般都会404,因此我们直接导入离线的镜像。

  ⅰ导入镜像

    拖动到虚拟机里会不会啊

  ⅱ解压镜像

tar -zxvf kubeadm-basic.images.tar.gz

  ⅲ编写脚本批量导入镜像 

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 a+x load-images.sh
./load-images.sh

  ⅳ将解压后的镜像及脚本复制到其他节点上

scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/

  2.开始初始化【这些命令应运行在主节点上】

通过如下指令创建默认的kubeadm-config.yaml文件:

kubeadm config print init-defaults  > kubeadm-config.yaml

kubeadm-config.yaml组成部署说明:

  • InitConfiguration: 用于定义一些初始化配置,如初始化使用的token以及apiserver地址等
  • ClusterConfiguration:用于定义apiserver、etcd、network、scheduler、controller-manager等master组件相关配置项
  • KubeletConfiguration:用于定义kubelet组件相关的配置项
  • KubeProxyConfiguration:用于定义kube-proxy组件相关的配置项

可以看到,在默认的kubeadm-config.yaml文件中只有InitConfiguration、ClusterConfiguration 两部分。我们可以通过如下操作生成另外两部分的示例文件:

# 生成KubeletConfiguration示例文件
kubeadm config print init-defaults --component-configs KubeletConfiguration # 生成KubeProxyConfiguration示例文件
kubeadm config print init-defaults --component-configs KubeProxyConfiguration
关于kubeadm-config.yaml更多配置语法参考: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2

使用kubeadm-config.yaml配置主节点:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/

kube-proxy开启ipvs参考: https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md

kubelet的配置示例参考: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/kubelet-integration/#configure-kubelets-using-kubeadm

  ⅰ显示init默认的初始化文件并打印到kubeadm-config.yaml文件中,这样就拿到了kubeadm默认的初始化模板

kubeadm config print init-defaults > kubeadm-config.yaml

  ⅱ查看并修改kubeadm-config.yaml文件

vim kubeadm-config.yaml
    #修改的内容
    localAPIEndpoint:
        advertiseAddress: 192.168.66.77 //当前服务器的节点地址(当前ip地址)
    kubernetesVersion: v1.16.3 //模板的版本可能与我们实际安装的版本不同,需要修改
    networking:
        podSubnet: 10.244.0.0/16   //(+)声明pod的所处网段【注意,必须要添加此内容】默认情况下我们会安装一个flnode网络插件去实现覆盖性网路,它的默认pod网段就这么一个网段,如果这个网段不一致的话,后期我们需要进入pod一个个修改
        serviceSubnet: 10.96.0.0/12 
    #添加的内容【请注意,在Kubernetes 1.11和更高版本中,默认SupportIPVSProxyMode设置为true,因此高版本中此部分可省略。github文档:https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md
    apiVersion: kubeproxy.config.k8s.io/v1alpha1 //把默认的调度方式改为ipvs调度模式
    kind: KubeProxyConfiguration
    kubeProxy:
        config:
            featureGates:
                SupportIPVSProxyMode: true
            mode: ipvs

  ⅲ开始进行初始化

#使用指定的yaml文件进行初始化安装 自动颁发证书(.13后支持) 把所有的信息都写入到 kubeadm-init.log中
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
--experimental-upload-certs已被弃用,官方推荐使用--upload-certs替代,官方公告:https://v1-15.docs.kubernetes.io/docs/setup/release/notes/

  ⅳ通过初始化日志查看初始化过程中的信息

vim kubeadm-init.log

  *日志信息一般有以下几点:

1.最开始告诉我们kubernetes的版本
2.检测当前运行环境
3.为k8s集群下载镜像【时间很长,镜像需要从Google GCE下载】
4.开始安装镜像
5.在/var/lib/kubelet/kubeadm-flags.env文件中保存了kubelet环境变量
6.在/var/lib/kubelet/config.yaml文件中保存了kubelet配置文件
7.在/etc/kubernetes/pki目录中保存了k8s所使用的所有的证书,因为k8s采用了http协议进行的C/S结构的开发,它为了安全性考虑在所有的组件通讯的时候采用的是https的双向认证的方案,所以k8s需要大量的CE证书以及私钥密钥
8.配置DNS以及当前默认的域名【svc(service)的默认名称】
9.生成k8s组件的密钥
10。指定DNS的名称及地址
11.在/etc/kubernetes目录下生成k8s组件的配置文件
12.RBAC授权
13.初始化成功

  ⅴ初始化完成后需要的工作

    在当前的用户的Home目录下创建.kube目录(这个目录中保存我们的连接配置,kubectl和kubeApi进行https通讯,所以有一些缓存需要保存以及一些认证文件)

mkdir -p $HOME/.kube

    拷贝集群管理员的配置文件到这个目录下

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    授予权限(所有者 所有组授予当前的用户)

sudo chown $(id -u):$(id -g) $HOME/.kube/config

    查看k8s节点状态

kubectl get node

    此时主节点状态为NotReady,因为k8s需要扁平化的网络,此时k8s中还没有构建flannel网络插件

  ⅵ安装flannel网络插件

    下载flannel yaml文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    创建flannel

kubectl create -f kube-flannel.yml

    查看flannel是否部署成功【系统组件默认在kube-system命名空间下】,同样使用ifconfig也可以看到flannel

kubectl get pod -n kube-system

    此时查看node状态应该为Ready状态

  ⅶ将k8s子节点加入到k8s主节点【命令在vim kubeadm-init.log中】,该命令在子节点运行

  **如果子节点在加入主节点之前未导入镜像,建议在加入主节点之前导入镜像或执行以下命令下载镜像

kubeadm config images pull

  将k8s子节点加入到k8s主节点

kubeadm join masterIp:masterPort --token xxx

  此时查看node节点应该有3个,但子节点状态为notReady,等待子节点的flannel初始化完成即可。

  *如果子节点执行加入主节点的命令报错的话,可以尝试执行kubeadm reset命令后重试

  

												

【k8s第二步】Kubernetes-Kubeadm部署安装【已修正错误】的更多相关文章

  1. kubeadm部署安装+dashboard+harbor

    kubeadm 部署安装+dashboard+harbor master(2C/4G,cpu核心数要求大于2) 192.168.80.10 docker.kubeadm.kubelet.kubectl ...

  2. (二)Kubernetes kubeadm部署k8s集群

    kubeadm介绍 kubeadm是Kubernetes项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,kubeadm是Kubernetes集群全生命周期的管理 ...

  3. kubernetes kubeadm部署高可用集群

    k8s kubeadm部署高可用集群 kubeadm是官方推出的部署工具,旨在降低kubernetes使用门槛与提高集群部署的便捷性. 同时越来越多的官方文档,围绕kubernetes容器化部署为环境 ...

  4. Kubeadm部署安装kubernetes1.12.1

    1.环境准备(这里是master) CentOS 7.6 两台配置如下,自己更改主机名,加入hosts, master和node 名字不能一样 # hostname master # hostname ...

  5. Kubernetes Kubeadm部署集群

    Kubernetes高可用架构 Kubenetes 2个高可用核心 apiserver.etcd etcd:集群数据中心,需要保持高可用,用于存放集群的配置信息.状态信息及Pod等信息.如果数据丢失集 ...

  6. 【k8s第一步】Kubernetes-Linux系统初始化【已修正错误】

    ⒈配置Linux的IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33v ifcfg-ens33是网卡的最新命名规范,它会从BIOS => PC ...

  7. 【k8s第三步】Kubernetes-Dashboard仪表盘【已修正错误】

    ⒈下载描述文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta6/aio/deploy/recommen ...

  8. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  9. K8s 二、(1、kubeadm部署Kubernetes集群)

    准备工作 满足安装 Docker 项目所需的要求,比如 64 位的 Linux 操作系统.3.10 及以上的内核版本: x86 或者 ARM 架构均可: 机器之间网络互通,这是将来容器之间网络互通的前 ...

随机推荐

  1. 三个div并排

    css: .div-inline{ display:inline} html: <div class="div-inline">第一个div盒子</div> ...

  2. php 图片格式转换-亲测ok

    代码如下 /** * 图片格式转换 * @param string $image_path 文件路径或url * @param string $to_ext 待转格式,支持png,gif,jpeg,w ...

  3. iOS开发 Error: CGImageProviderCreate: invalid image provider size

    一般可拉伸的图片(俗称点9图片)会放到images.xcassets目录里,然后对图片进行Slicing,但是当对一张图片进行slicing的left和right都是0的话,在iOS7.0上运行会出现 ...

  4. JAVA基础知识|堆和栈

    一.java六个存储数据的地方 1)寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直 ...

  5. pwn学习日记Day18 《程序员的自我修养》读书笔记

    知识杂项 obj文件:当前源代码编译成二进制目标文件 exe文件:将.obj文件与库文件.lib等文件链接生成的可执行文件 一个现代编译器的主要工作流程如下: 源程序(source code)→ 预处 ...

  6. ELK日志解决方案

    1.方案整体设计 FileBeats+Logstash+ElasticSearch+Kibana 1)ElasticSearch 简称ES,用来做日志数据的存储,当然也可以存储其他数据, ES是互联网 ...

  7. 移动端——页面点击( touchend -> click)

    手机端页面好多要注意的,点击事件就是其中一个: 在手机端页面中使用 click,安卓手机能正常实现点击效果,可是苹果手机不能点击:用 touchend 代替 click,苹果手机中能点击,但是可能出现 ...

  8. Linux中vi编辑器的使用详解

    vi编辑器是Linux系统下标准的编辑器.而且不逊色于其他任何最新的编辑器.可是会用的有多少呢.下面介绍一下vi编辑器的简单用法和部分命令.让你在Linux系统中畅行无阻. 基本上vi可以分为三种状态 ...

  9. 智能指针-共享式shared_ptr

    #include <iostream>#include <string>#include <vector>#include <memory> using ...

  10. matllab 按照文件夹处理文件

    folders=dir('文件夹地址'); folders={folders.name}; folders=setdiff(folders,{'.','..'})'; num=length(folde ...