部署方式:
1.把组件都部署为系统级的daemon形式,安装在主机节点上,用systemctl管控启停,安装过程需要手动解决。(为了安全需要ca证书,很繁琐)
2.使用kubeadm集群部署管理工具来部署。把k8s核心组件也部署为pod。
kubeadm:所有节点都要安装docker、kubelet、kubeadm,把第一个节点初始化为master,剩下的节点运行为node.
静态pod(static pod):除flannel外,其他k8s核心组件运行的pod都为静态pod
master:api-server、kube-scheduler、kube-controller-manager、etcd、flannel 运行为pod
node:kube-proxy,flannel 运行为pod

一、环境准备

所有规划主机(一台master,两台node)均需操作

1、关闭防火墙,selinux

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# setenforce
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

2、时间同步服务器

3、关闭swap分区(临时方案)

[root@master ~]# swapoff –a

除了关闭swap外,还可以更改kubelet配置,忽略swap

[root@master ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

4、host配置

节点之间可以互相解析,host文件配置。

5、ssh等效性配置

Master对node免密登录

6、加载内核模块

配置系统内核参数使流过网桥的流量也进入iptables/netfilter框架,需加载需要的内核模块。

[root@master ~]# modprobe br_netfilter
[root@master ~]# modprobe ip_conntrack
[root@master ~]# echo -e 'net.bridge.bridge-nf-call-iptables = 1 \nnet.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
[root@master ~]# sysctl -p

7、Yum源配置(base,epel,k8s,docker)

[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak
[root@node1 yum.repos.d]# mv * bak/
[root@node1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@node1 yum.repos.d]# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 yum.repos.d]# 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=
EOF
[root@node1 yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node1 yum.repos.d]# yum clean all && yum makecache fast

二、集群创建

1、安装kubeadm及相关工具

所有节点都需要操作。

[root@master ~]# yum install docker kubectl kubeadm  kubelet  -y  #默认安装最新版本,可指定版本(yum install docker kubectl-1.10. kubeadm-1.10. kubelet-1.10.  -y)
启动相关进程:
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl enable docker && systemctl restart docker
[root@master ~]# systemctl enable kubelet

在此处不能直接启动kubelet,启动不了,会不停重启。

2、master init 集群

(不能访问国外仓库的情况下,可指定国内仓库,或在启动配置文件里修改仓库地址)

[root@master ~]# kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/ --service-cidr=10.96.0.0/  --image-repository registry.aliyuncs.com/google_containers
# kubeadm config images pull
# kubeadm reset

初始化失败,根据提示查找失败原因。

kubelet和docker 的cgroup driver 有2种方式:cgroupfs和systemd.注意保持 2个应用的driver保持一致。(如果docker是cgroupfs的,则修改kubelet :Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"。如果docker为systemd,则不用更改)

查看docker driver:

[root@master ~]# vim /usr/lib/systemd/system/docker.service

[root@node1 ~]# docker info

查看kubelet driver:

[root@master ~]# vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

[root@master ~]# vim  /var/lib/kubelet/kubeadm-flags.env

最终成功实验: docker driver改为cgroupfs ,kubelet 为systemd,kubeadm init成功,但官方建议docker driver为systemd,是否与版本有关,存疑???

3、node 加入集群

准备工作,master节点上操作

[root@master ~]# useradd kubelet

[root@master ~]# passwd kubelet

把kubelet用户加入sudo用户组

[root@master ~]# su - kubelet

[kubelet@master ~]$ mkdir -p $HOME/.kube

[kubelet@msaster ~]$  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[kubelet@master ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

在node1上运行join:

[root@node1 ~]# kubeadm join 192.168.42.128:6443 --token vo63m6.gnlukzl3myf1m3v8 \

--discovery-token-ca-cert-hash sha256:5212f47a507fb30cbe8f14b35c1d92748874eda5d9ef60e38efca373a487567a

4、网络配置

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

至此,k8s集群搭建成功。结果如下:

4、在已有集群中添加节点:

新节点准备,在各节点上做好主机名,hosts文件映射,ssh等效性配置,关闭swap等初始化操作,安装docker,kubelet并正常启动;

在master上打印出加入集群的命令:

[kubelet@master ~]$ kubeadm token create --print-join-command

在新节点上执行以上命令

执行加入命令时如果报错,报错内容为:error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition。进行如下操作:

[root@node2 ~]# swapoff -a
[root@node2 ~]# kubeadm reset
[root@node2 ~]# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables –X
[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart kubelet

遇kubelet报错如下:Failed to get system container

问题产生原因为:kubernetes和docker版本兼容性问题。

三、遇到的问题

默认 kubeadm 创建的集群会在内部启动一个单点的 etcd,当然大部分情况下 etcd 还是很稳定的,但是一旦etcd 由于某种原因挂掉,这个问题会非常严重,会导致整个集群不可用。具体原因是 etcd 存储着 kubernetes 各种元数据信息;包括 kubectl get pod 等等基础命令实际上全部是调用 RESTful API 从 etcd 中获取的信息;所以一但 etcd 挂掉以后,基本等同于 kubectl 命令不可用,此时将变为 ‘瞎子’,集群各节点也会因无法从 etcd 获取数据而出现无法调度,最终挂掉。

此时kube-apiserver因为连接不到etcd,死活启动不起来。然后整个集群就没救了。

单独启动etcd容器也启动不起来,容器会不停的被删除重启,但就是启动不起来。

[root@master manifests]# docker logs -f 76797c65b499  #查看日志。

只能重建集群,之前的所有信息都没有了。

四、Tips:

更改docker仓库地址:

[root@master ~]# vim /etc/sysconfig/docker
OPTIONS=' --log-driver=journald --registry-mirror=http://xxxx.mirror.aliyuncs.com

K8s和docker要版本兼容,不能直接yum,版本对照参照git文档

# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

1.使用kubeadm安装kubernetes的更多相关文章

  1. Centos7 使用 kubeadm 安装Kubernetes 1.13.3

    目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...

  2. kubeadm安装kubernetes V1.11.1 集群

    之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...

  3. 使用kubeadm安装kubernetes高可用集群

    kubeadm安装kubernetes高可用集群搭建  第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...

  4. 使用kubeadm安装Kubernetes 1.12

    使用kubeadm安装Kubernetes 1.12 https://blog.frognew.com/2018/10/kubeadm-install-kubernetes-1.12.html 测试环 ...

  5. 使用kubeadm安装kubernetes v1.14.1

    使用kubeadm安装kubernetes v1.14.1 一.环境准备 操作系统:Centos 7.5 ​ ⼀ 一台或多台运⾏行行着下列列系统的机器器: ​ Ubuntu 16.04+ ​ Debi ...

  6. 使用kubeadm 安装 kubernetes 1.15.1

    简介: Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿.kubernetes1.5版本以及之前,安装 ...

  7. 使用 kubeadm 安装 kubernetes v1.16.0

    近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系           统:CentOS Linux release 7.6 Docke ...

  8. Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...

  9. kubeadm 安装Kubernetes 1.16.3 (CentOS7+IPVS+Calico)

    目录 ·  . 一.更新系统内核(全部节点) ·  . 二.基础环境设置(全部节点) ·  . 1.修改 Host ·  . 2.修改 Hostname ·  . 3.主机时间同步 ·  . 4.关闭 ...

  10. 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践

    前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...

随机推荐

  1. 《ECMAScript6 入门》

    NVM Babel babel-core:提供 Babel 的 API,可以获得转码后的代码和抽象语法树. babel-polyfill:Babel 只能转换语法,如果想用类似 Promise.Gen ...

  2. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_07.环境搭建的注意事项

    2 resources下面创建目录要一级一级的创建,下面这个创建的就是一级目录而不是三级 在文件夹下看到的目录也是一级的 因此这里创建目录需要一个个的去创建 配置文件和dao类这两个目录要保持一致,这 ...

  3. c++ 读取 utf-8 文件到 string

    #include <iostream> #include <assert.h> #include <fstream> #include <string> ...

  4. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

  5. echars 饼图 --》二次封装

    <template> <!-- 饼状图 1. 调用页面引入 import EcharsPie from '@/components/echarsPie.vue'; 注:自定义的组件名 ...

  6. ipad已停用 连接itunes怎么办

    问题描述: ipad 开机密码多次输入出错后,提示 ipad已停用 连接itunes 解决方法: 参考: https://jingyan.baidu.com/article/fb48e8bee9ef4 ...

  7. C语言I-博客作业05

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言1博客作业05 我在这个课程的目标是 学会运用函数编代码 这个作业在那个具体方面帮助我实现目标 写C语言作业的时候,编代码的实践中 ...

  8. 首次全备及事务备份对数据库的影响,2014 SpexSql log评估版探索

    参考:https://www.cnblogs.com/gered/p/9882367.html 关键词:解析事务日志 新建数据库test3,然后查看日志文件,382行记录 SELECT min([Be ...

  9. oracle_fdw安装及使用(无法访问oracle存储过程等对象)

    通过oracle_fdw可以访问oracle中的一些表和视图,也可以进行修改,尤其是给比较复杂的系统使用非常方便. (但不能使用oracle_fdw来访问oracle的存储过程.包.函数.序列等对象) ...

  10. easy-mock的运用

    一.概念 Easy Mock 是杭州大搜车无线团队出品的一个极其简单.高效.​可视化.并且能快速生成模拟数据的 在线 mock 服务 .以项目管理的方式组织 Mock List,能帮助我们更好的管理 ...