部署方式:
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. ssm项目dao层方法异常:org.apache.ibatis.binding.BindingException: Invalid bound statement

    在IntelliJ IDEA中用ssm框架搭建了一个demo项目,在执行到dao层方法时抛出这个异常: org.apache.ibatis.binding.BindingException: Inva ...

  2. Eclipse设置保存时自动格式化代码

    在使用eclipse时,经常需要使用到Ctrl+Shift+F来格式化代码,可以打开保存时格式化,会更方便. 打开方式:Window-->Preferences-->Java --> ...

  3. Delphi下利用WinIo模拟鼠标键盘详解 有参考价值

    https://blog.csdn.net/fgrass_163/article/details/6365296 Delphi下利用WinIo模拟鼠标键盘详解 2011年04月26日 21:03:00 ...

  4. jdk的keytool生成jks和获取jks的信息,公匙

    1.生成jks.执行命令:keytool -genkeypair -alias mytest -keyalg RSA -keypass mypass -keystore mytest.jks -sto ...

  5. oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate

    oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate --继昨天的测试,这一篇实施单实例双向复制(完全重新搭建) --环境不变 db1,db2( ...

  6. 【Java基础】内部类

    非静态内部类不能拥有静态变量 为什么 下面这段代码,如果Lazyholder没有static修饰,则编译不过 class Singleton2 { private static class LazyH ...

  7. Python2.7安装&配置环境变量

    python安装版本为2.7 下载安装包,双击安装,一路按照提示进行. 安装完成后,配置环境变量. 我的电脑—属性--高级系统设置—高级—环境变量--Path--编辑(将安装路径粘贴进去),添加到安装 ...

  8. 20191127 Spring Boot官方文档学习(4.18-4.24)

    4.18.JTA的分布式事务 通过使用Atomikos或Bitronix嵌入式事务管理器,Spring Boot支持跨多个XA资源的分布式JTA事务.部署到合适的Java EE应用程序服务器时,还支持 ...

  9. ansible-playbook -l 选项

    -l <SUBSET>, --limit <SUBSET> further limit selected hosts to an additional pattern 限制脚本 ...

  10. JDK,JRE,JVM的区别与联系?

    概念区别 JDK:           Java Develpment Kit java 开发工具JRE:         Java Runtime Environment java运行时环境JVM: ...