k8s简介以及linux环境下的详细安装步骤

k8s是Kubernetes的简称,Kubernetes中间有8个单词,所以叫k8s,就是这么简单粗暴。
我们可以看到docker的图标是鲨鱼,k8s的图标是舵盘,是个领航员,代表着一个k8s引领着一群鲨鱼。我们知道docker是容器,不知道的可以先学学docker再学习k8s,这里K8S的作用就是管理容器。当我们的应用中有很多容器的时候,是不需要去维护每一个容器的运行状态,K8S会去帮助我们维护的,比如有个容器的tomcat挂了,K8S会自动重启让它继续运行,所以它是一个运维宝宝们爱死的神器!
在这里插入图片描述
K8S是谷歌根据谷歌内部的borg系统用go语言编写的,borg系统相当于K8S的前身,是谷歌以前让人很眼馋的一个容器化管理系统,所以K8S一开源就受到各界大佬的推崇。
特点:
1.轻量级:go语言写的,资源消耗少
2.开源
3.弹性伸缩
4.负载均衡

K8S架构图
在这里插入图片描述

  • kubectl和webUI:客户端。
  • etcd:K-V结构的分布式数据库,保存了整个集群的状态和配置信息,是集群的持久化机制,遇到故障可以使集群快速恢复。该组件发生故障,整个K8S就会瘫痪。
  • apiserver:所有服务访问和资源操作的统一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • replication controller:它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩
  • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet:负责维护容器的生命周期,通俗理解就是对于容器的创建和销毁就是kubelet来控制的。
  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡;
  • pod:在K8S中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统。

集群安装

准备:三台linux机器,分别为master,node1,node2

  • 关闭CentOS7自带的防火墙服务
systemctl disable firewalld
systemctl stop firewalld
  • 修改主机名

[root@master ~]# hostnamectl set-hostname master
[root@node1 ~]# hostnamectl set-hostname node1
[root@node2 ~]# hostnamectl set-hostname node2

  • 配置IP,修改3台机器的hosts文件

[root@master ~]# vi /etc/hosts

在这里插入图片描述

  • 三台机器都做时间校对

[root@master ~]# ntpdate ntp1.aliyun.com
[root@master ~]# hwclock

在这里插入图片描述

  • 配置dockers镜像

[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  • 配置kubernetes仓库

[root@master ~]# vi /etc/yum.repos.d/kubernetes.repo

#加入以下配置内容
[kubernetes]
name=kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

在这里插入图片描述
执行以下命令

[root@master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg rpm --import rpm-package-key.gpg yum repolist

在这里插入图片描述
如果没有开同步键入,发送文件到node1和node2
在这里插入图片描述

[root@master ~]# cd /etc/yum.repos.d/

[root@master yum.repos.d]# scp CentOS.repo docker-ce.repo kubernetes.repo root@node1:/etc/yum.repos.d/

[root@master yum.repos.d]# scp CentOS.repo docker-ce.repo kubernetes.repo root@node2:/etc/yum.repos.d/

  • 安装docker和kubelet
    这里指定kubeadm版本是1.14.0,可以默认最新,也可以指定其他版本

[root@master ~]# yum -y install docker-ce kubelet-1.14.0 kubeadm-1.14.0 kubectl-1.14.0

在这里插入图片描述

  • 添加环境变量

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

在其中添加变量
Environment=“HTTPS_PROXY=http://www.ik8s.io:10080”
Environment=“NO_PROXY=127.0.0.0/8,172.0.0.0/16”

在这里插入图片描述

  • 重新加载服务的配置文件

[root@master ~]# systemctl daemon-reload

  • 启动docker

[root@master ~]# systemctl start docker

  • 查看docker是否成功启动

[root@master ~]# docker --version

在这里插入图片描述

  • 设置docker开机自启动

[root@master ~]# systemctl enable docker

  • 查看docker信息

[root@master ~]# docker info

  • 设置iptables文件值

[root@master ~]# echo 1 >> /proc/sys/net/bridge/bridge-nf-call-ip6tables
[root@master ~]# echo 1 >> /proc/sys/net/bridge/bridge-nf-call-iptables

  • 查看都安装的文件

[root@master ~]# rpm -ql kubelet

在这里插入图片描述

  • 设置开机自启动

[root@master ~]# systemctl enable kubelet

  • 初始化(这里master执行,node1和node2不执行,上面的内容三台机器都执行)
    由于墙的存在,在初始化的时候会报错,所以我们要先将初始化需要的东西通过docker镜像拉取下来,注意这里版本要对用,我上面下载kubeadm的时候是指定的1.14.0版本。

docker pull mirrorgooglecontainers/kube-apiserver:v1.14.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.0
docker pull mirrorgooglecontainers/kube-proxy:v1.14.0
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1
————————————————
在重新给下载的打个tag
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.14.0 k8s.gcr.io/kube-apiserver:v1.14.0
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.14.0 k8s.gcr.io/kube-controller-manager:v1.14.0
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.14.0 k8s.gcr.io/kube-scheduler:v1.14.0
docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.14.0 k8s.gcr.io/kube-proxy:v1.14.0
docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag docker.io/coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
————————————————

如果上面的不能执行显示拒绝
在这里插入图片描述
点开这个网址
然后进行注册,然后点击下图中标注的小火箭
在这里插入图片描述
往下拉,找到下图中的红框中的命令,然后拷贝到linux终端执行,就可以使用docker pull了。
在这里插入图片描述
这里是真正的初始化

[root@master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

出现下图说明初始化成功
在这里插入图片描述
上图中的第二个红框内容要记住,这是让其他节点加入集群的命令

kubeadm join 172.31.35.3:6443 --token m79nwh.6lv1to84l62718xc
–discovery-token-ca-cert-hash sha256:41548092602581e0a3e1b374876ccd26003a3f774e8940fa0847a4130da5a1fb

  • 检测组件是否正常运行

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# kubectl get cs

出现下图说明正常运行
在这里插入图片描述

  • 查看并验证节点信息是否成功

[root@master ~]# kubectl get nodes NAME

在这里插入图片描述

  • Flannel安装

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,每个Node的Docker服务会分别负责所在节点容器的IP分配。Node内部得容器之间可以相互访问,但是跨主机(Node)网络相互间是不能通信。Flannel设计目的就是为集群中所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得"同属一个内网"且"不重复的"IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

[root@master ~]# kubectl apply -f
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@master ~]# curl -sSL
“https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true”
| kubectl create -f -

由于我这里网络的原因,出现拒绝连接,所以我这里先跳过。
在这里插入图片描述

  • 查看pod运行情况:
    这里由于我的网络问题,flannel镜像从docker拉取失败,一般是running状态是正确的

[root@master ~]# kubectl get pods -n kube-system
在这里插入图片描述

在node1和node2节点中执行kubeadm初始化成功后最下面的语句,前文红框标注过,让node1和node2加入集群

[root@node1 ~]# kubeadm join 172.31.35.3:6443 --token
m79nwh.6lv1to84l62718xc \ --discovery-token-ca-cert-hash
sha256:41548092602581e0a3e1b374876ccd26003a3f774e8940fa0847a4130da5a1fb

在这里插入图片描述

  • 查看节点

[root@master ~]# kubectl get nodes

在这里插入图片描述
我查询了节点的运行状态,应该是由于上面的flannel安装有问题,导致不是所有的pod都是running。
在这里插入图片描述
如果你们安装的时候也出现了NotReady的问题,那么执行以下命令

vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

在这里插入图片描述
然后将上图中红框中的内容注释掉,保存退出,重新查看下节点的运行状态,会发现已经是ready状态,说明安装成功。

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐