部署环境:

1:系统配置(ALL HOST)

  1.1:SELINUX配置

    首先获取selinux的状态

  1. [root@localhost ~]# sestatus

    可以看到当前的状态是启用的,此状态更改有两种方式:

  1:临时关闭

  1. [root@localhost ~]# setenforce 0  #临时关闭

  2:永久关闭(修改配置文件)

    selinux配置文件涉及到两个,如下

  1. /etc/selinux/config
  2. /etc/sysconfig/selinux

    用vi命令分别修改这两个配置文件的SELINUX参数为disabled

  1. SELINUX=disabled

    也可以使用sed命令替换

  1. sudo sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
  2. sudo sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

    修改完成如下

  1. [root@localhost ~]# vi /etc/selinux/config
  2. # This file controls the state of SELinux on the system.
  3. # SELINUX=disabled
  4. # enforcing - SELinux security policy is enforced.
  5. # permissive - SELinux prints warnings instead of enforcing.
  6. # disabled - No SELinux policy is loaded.
  7. SELINUX=disabled
  8. # SELINUXTYPE= can take one of three values:
  9. # targeted - Targeted processes are protected,
  10. # minimum - Modification of targeted policy. Only selected processes are protected.
  11. # mls - Multi Level Security protection.
  12. SELINUXTYPE=targeted

    配置文件修改之后需要重启系统才能生效,但是可以先使用相关指令临时关闭,无需浪费时间,至此,SELINUX配置完成

1.2:防火墙配置

  1. [root@localhost ~]# systemctl disable firewalld #禁止防火墙开机自启
    [root@localhost ~]# systemctl stop firewalld #关闭防火墙

    关闭之后,查看服务状态

  1. [root@localhost ~]# systemctl status firewalld #查看防火墙当前运行状态

    可以看到当前状态为dead #不活跃的,所以防火墙配置完成

1.3:关闭swap 

sudo swapoff -a

    可以看到,当前的分区挂载是存在有swap的,关闭的方法很简单,在swap这一行前面加入一个  {#}    即可,或者执行下面的指令

  1. sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab #永久 

    至此,swap配置完成

1.4:配置K8S虚拟网络路由转发

  1. sudo echo -e "net.bridge-nf-call-ip6tables = 1\nnet.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1" > /etc/sysctl.conf

    上面的命令就是将下面三个参数写入sysctl.conf配置文件,修改之后执行生效指令

  1. sysctl -p

    结果如下,其中的报错信息暂时不管,至此,转发配置完成

2:配置阿里源,docker源,kubelet源(ALL HOST)

        (众所周知,国内使用一些国外系统的时候总会遇到一些网络问题,故此我们在安装任何服务前先配置一下软件仓库服务器)

1:备份源

  1. rm -rf /yum_bak&&mkdir -p /yum_bak
  2. mv /etc/yum.repos.d/* /yum_bak/&&ls

2:添加阿里源,docker源,kubelet源

  1. sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #添加阿里源
    sudo curl -o /etc/yum.repos.d/Docker-ce.repo
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加docker-ce源
  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled=1
  6. gpgcheck=1
  7. repo_gpgcheck=1
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. EOF
  1. ##源配置完成
    setenforce 0
    #临时关闭selinux

  1. sudo yum clean all #清除缓存
  2. sudo yum makecache -y  #创建索引
  3. sudo yum repolist  #包统计

    结果如下:

    可以看到,源配置已经成功

3:服务安装(all host)

3.1:安装docker

首先查看当前仓库已启用的docker-ce仓库有哪些

  1. yum repolist all | grep docker

可以看到,当前启用的仓库为稳定版,其他类型均为禁用状态,下一步查看当前可安装的docker版本

  1. yum list docker-ce --showduplicates|sort -r

当前源可获取的最新版本为第一个,也就是

所以,现在如果执行服务安装命令,则会安装此版本,现在我们先安装指定版本(低版本)

  1. sudo yum install -y docker-ce-18.06..ce-.el7

然后启动看看

  1. sudo systemctl start docker

查看docke信息

  1. docker info

现在我又想安装最新版了,那么也简单,执行安装/更新指令即可

  1. sudo yum update -y docker-ce

然后再次查看docker信息

  1. sudo systemctl restart docker
  2. sudo docker info

docker安装到此结束

3.2:安装kubelet(k8s)

首先查看可安装版本

  1. yum list kubelet --showduplicates|sort -r

这次就直接安装最新版吧

  1. sudo yum install -y kubelet

然后继续按照其他组件(可一起安装)

  1. sudo yum install -y kubeadm kubectl

至此,服务安装部分结束

4:服务配置

4.1:docker 配置(all host)

docker一般情况下只需要配置一点即可(镜像地址),命令如下:

  1. sudo mkdir -p /etc/docker
    echo -e "{\n   \"registry-mirrors\": [\"https://r61ch9pn.mirror.aliyuncs.com\"]\n}" > /etc/docker/daemon.json
    cat /etc/docker/daemon.json

配置之后重启docker服务,查看docker信息,查看镜像地址是否成功改变

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker
  3. sudo docker info

查看镜像地址(docker info反馈的下面)

至此,docker配置完成

4.2:K8S配置(ALL Host)

所有节点部分:

      首先为了区分开来,先对主机进行命名及主机解析

4.2.1:主机名配置:

  1. hostnamectl set-hostname master  #其他主机分别把master换成自己的主机名即可
    su
    hostname

4.2.2:主机解析(所有节点一致)

先查看当前配置

  1. cat /etc/hosts

当前配置则是默认设置,所以现在需要追加主机映射配置

  1. vi /etc/hosts

追加以下参数

  1. 10.5.1.10 master
  2. 10.5.1.11 node1
  3. 10.5.1.12 node2 etcd

效果如下:

然后将此文件分派给其他节点:

  1. scp /etc/hosts node1:/etc/
    scp /etc/hosts node2:/etc/

至此,主机解析配置完成!

4.3:初始化k8s(Master)

获取k8s版本

  1. ver=`kubeadm version|awk '{print $5}'|sed "s/[^0-9|\.]//g"|awk 'NR==1{print}'`

获取MASTER主机IP

  1. ip=`cat /etc/hosts|grep master|awk '{print $1}'|awk 'NR==1{print}'`

验证信息

  1. echo -e "k8s version is v${ver}\nmaster ip is ${ip}"

出现以上信息之后就可以执行初始化操作了:初始化master节点

  1. kubeadm init --apiserver-advertise-address=${ip} \
  2. --image-repository registry.aliyuncs.com/google_containers \
  3. --kubernetes-version v${ver} \
  4. --service-cidr=10.1.0.0/ \
  5. --pod-network-cidr=10.244.0.0/

然后遇到问题

首先解决第一个:防火墙配置

  1. sudo systemctl stop firewalld&&sudo systemctl disable firewalld

然后到第二个:设置docker服务开机自启

  1. sudo systemctl enable docker

第三个暂不解决,这个问题不影响主要功能

第四个:设置k8s开机自启

  1. sudo systemctl enable docker kubelet

第五个:关闭swap

  1. sudo swapoff -a #临时关闭
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久

现在继续初始化:

此时可以看到显示镜像正在拉取中........

然后初始化成功,提示有三个关键信息,前面两个直接在master执行

按照提示执行相关指令:

  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后执行下一个指令

  1. kubectl apply -f https://xypj-1252147235.cos.ap-guangzhou.myqcloud.com/kube-flannel.yaml

  

第三条执行分别在node节点执行,此指令涉及的uid属于随机性,如过期请在master节点执行下面的命令重新生成

  1. kubeadm token create --print-join-command

至此,master节点初始化完成!

5:Node节点加入并验证

首先,在master节点执行注册命令创建,然后复制到node节点进行注册

然后把这段复制下来(随机的,不要复制我的)

  1. kubeadm join 10.1.1.2: --token 32sevm.0l5rmz0q8v8kgfzv --discovery-token-ca-cert-hash sha256:25cd4612de2097d41e0bf49bd8f97ba45971d61b50fb4a768f28d49741d52e5b

然后到node节点执行

可以看到此时有一个错误,一个意外,但是不要慌,稳住!首先解决第一个意外

可以看到,此时的驱动程序是cgroup,并不是system,那么就改一下!

  1. echo -e "{\n\t\"exec-opts\": [\"native.cgroupdriver=systemd\"],\n\t\"registry-mirrors\": [\"http://hub-mirror.c.163.com\"]\n}" > /etc/docker/daemon.json

然后验证一下

此时,文件已经修改完成,然后继续解决下一个错误

  1. echo > /proc/sys/net/bridge/bridge-nf-call-iptables

全部解决完成之后,只需要重新启动docker即可

已经解决两个问题了,然后重新注册试试

此时显示已经加入成功,然后去master节点查看

可以看到,node节点已经加入了,但是状态属于未准备,并且rule(角色)为空!不要慌,稳住,下面先解决最简单的角色

  1. kubectl label nodes node node-role.kubernetes.io/node=

//nodes接着的“node”属于节点主机名;

//最后一个node属于角色属性(另外还可以设置的角色为master)

验证一下!

此时,角色已经改好了,现在看一下node节点到底咋了。

在node节点查看容器运行情况

可以看到,有一个容器是退出状态的,这时候可以判断很大程度上是这个容器导致的,那就看看这个容器到底咋了

emmmm,居然看不到日志,然后我发现已经可以了

莫名其妙,但是可以看的出的是,之前是使用tag进行运行容器的,现在是用镜像ID,既然可以了那就先不管了

好啦!到此结束

K8S搭建教程及部署脚本的更多相关文章

  1. LAMP环境搭建教程

    原文:LAMP环境搭建教程 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.M ...

  2. 非常简单的部署脚本(JavaWeb项目)和部署项目教程

    这个部署方式,前提需要通过WinSCP工具将本地Maven项目打成zip包放到Linux对应的用户目录下,然后执行脚本便可以完成一键部署. 大家看到下面的脚本,可以发现一个显著的特点,部署脚本内容基本 ...

  3. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

  4. 实现CI/CDk8s高可用集群搭建总结以及部署API到k8s

    实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s 前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署 ...

  5. 使用Kubeadm创建k8s集群之部署规划(三十)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  6. 分布式任务调度平台XXL-JOB搭建教程

    关于分布式任务调度平台XXL-JOB,其实作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式 ...

  7. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  8. Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程

    准备篇 一.环境说明: 操作系统:Windows Server 2003 SP2 32位 PHP版本:php 5.3.14(我用的php 5.3.10安装版) MySQL版本:MySQL5.5.25 ...

  9. gitlab服务器搭建教程

    gitlab服务器搭建教程 ----2016年终总结 三 参考https://bbs.gitlab.cc/topic/35/gitlab-ce-8-7-%E6%BA%90%E7%A0%81%E5%AE ...

随机推荐

  1. 洛谷$P2572\ [SCOI2010]$ 序列操作 线段树/珂朵莉树

    正解:线段树/珂朵莉树 解题报告: 传送门$w$ 本来是想写线段树的,,,然后神仙$tt$跟我港可以用珂朵莉所以决定顺便学下珂朵莉趴$QwQ$ 还是先写线段树做法$QwQ$? 操作一二三四都很$eas ...

  2. 曹工说Spring Boot源码(8)-- Spring解析xml文件,到底从中得到了什么(util命名空间)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  3. curl使用post方式访问Spring Cloud gateway报time out错误

    公司老的项目使用是php,要进行重构.其他团队使用php curl函数使用post方式调用Spring Cloud gateway 报time out错误. 但是使用postman测试是没有任何问题, ...

  4. 重新认识C语言的指针(上)

    ​ 独创性并不是首次观察某种新事物,而是把旧的.很早就是已知的,或者是人人都视而不见的事物当新事物观察,这才证明是有真正的独创头脑 -尼采 本文已经收录至我的GitHub,欢迎大家踊跃star 和 i ...

  5. AES中ECB模式的加密与解密(Python3.7)

    本文主要解决的问题 本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现.具体AES加密算法的原理这里不做过多介绍,想了解的可以参考文末的参考链接. 主要解决了两个问题: 在P ...

  6. Netty快速入门(05)Java NIO 介绍-Selector

    Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是 ...

  7. ArcEngine DEM叠加影像

    代码执行前: 代码执行后: 影像叠加代码: /// <summary> /// 叠加DEM /// </summary> /// <param name="pR ...

  8. Kafka日志压缩剖析

    1.概述 最近有些同学在学习Kafka时,问到Kafka的日志压缩(Log Compaction)问题,对于Kafka的日志压缩有些疑惑,今天笔者就为大家来剖析一下Kafka的日志压缩的相关内容. 2 ...

  9. 利用 sklearn 生成交叉特征:

    ------------------------------------- ------------------------------------- ------------------------ ...

  10. crawler碎碎念6 豆瓣爬取操作之获取数据

    import requests from lxml import etree s = requests.Session() for id in range(0,251,25): url ='https ...