⒈开启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. Jenkins+Ant+Git+Jmeter接口自动化

    一.服务器分别安装JKD.Jenkins.Ant.Git.Jmeter 1.JKD安装参考:https://www.cnblogs.com/xiaoxitest/p/6168045.html 2.Je ...

  2. Contest Hunter 3101

    题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...

  3. 20175313 张黎仙《Java程序设计》第十周学习总结

    目录 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码调试中的问题和解决过程 四.代码托管 五.心得体会 六.学习进度条 七.参考资料 一.教材学习内容总结 第十二章内容 主要内容 杂项 ...

  4. docker安装mysql挂载外部配置和数据目录

    从docker hub上可以找到mysql外挂配置和数据目录的一些文档说明 https://hub.docker.com/_/mysql 从该文档中可以了解到,mysql的默认配置为/etc/mysq ...

  5. Csdn账号如何注销?

    Csdn账号如何注销?   请在ios端app设置内注销 ios端注销在设置页面的底部左下角,andriod在2019.07月底更新,即可支持   文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎 ...

  6. 调用subprocess 使用logging打印日志

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Henry 17607168727@163.com import sys import lo ...

  7. Java同步数据结构之CopyOnWriteArrayList/CopyOnWriteArraySet

    前言 前面介绍完了队列(包括双端队列),今天探讨以下Java并发包中一个List的并发数据结构实现CopyOnWriteArrayList,顾名思义CopyOnWriteArrayList也是一种基于 ...

  8. C之内存地址

    计算机的内存地址 * 32位系统最多能识别4G内存 * 32位系统的地址总线长度是32位的,也就是说能分配给内存地址的数字是 2的32次方个 * 内存中每一个字节都需要一个内存地址 * 一个数字对用一 ...

  9. openpose关节图

  10. wangEditor编辑器控件里textarea的id不要用content

    头引用 <script type="text/javascript" src="js/jquery-1.10.2.min.js"></scri ...