文章目录

  • 一、k8s简介
  • 1、概述
  • 2、特点
  • 3、组件
  • 4、优点
  • 二、k8s环境部署
  • 1、确认harbor仓库
  • 2、添加节点解析,部署docker引擎
  • 3、安装部署软件kubeadm
  • 4、安装部署flannel网络组件
  • 三、排错和注意
  • 1、报错
  • 2、注意


一、k8s简介

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用.

Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

K8S为什么要部署在docker k8s部署容器_运维

1、概述

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,
将最终的应用服务交给用户。

2、特点

  • 可移植: 支持公有云,私有云,混合云,多重云
  • 可扩展: 模块化,插件化,可挂载,可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

3、组件

  • Master组件
    Master组件提供集群的管理控制中心
    Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。
  • Node节点组件
    节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

4、优点

  • 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
  • 服务高可用、高可靠。
  • 可将负载运行在由成千上万的机器联合而成的集群中。

二、k8s环境部署

主机需求

四台主机:
一台101为仓库主机
剩余三台分别为一台Master节点102和普通主机103和104
101 ip 172.25.76.11 harbor主机
102 ip 172.25.76.12 Master节点主机
103 ip 172.25.76.13 普通节点主机node1
104 ip 172.25.76.14 普通节点主机node2

1、确认harbor仓库

在仓库主机101

cd harbor/
docker-compose ps
若为空则使用该目录下的安装脚本文件安装
./install --help
添加第三个参数,防止安装加载过多占用内存过大
docker-compose start
docker-compose ps
再次查看仓库内容
出现后浏览器访问仓库主机,进入harbor仓库并登陆

K8S为什么要部署在docker k8s部署容器_docker_02


浏览器访问仓库主机harbor101的仓库

K8S为什么要部署在docker k8s部署容器_运维_03


K8S为什么要部署在docker k8s部署容器_docker_04

2、添加节点解析,部署docker引擎

在102,103,104同时进行

vim /etc/hosts添加解析
---
172.25.76.11 reg.westos.org
172.25.76.12
172.25.76.13
172.25.76.14
---

K8S为什么要部署在docker k8s部署容器_安装部署_05


仓库主机

配置docker仓库文件
cd /etc/yum.repos.d
ls
scp docker.repo 102:/etc/yum.repos.d/
scp docker.repo 103:/etc/yum.repos.d/
scp docker.repo 104:/etc/yum.repos.d/

复制证书保证三台主机能够登陆仓库主机
cd /etc/docker
ls
scp -r certs.d/ 102:/etc/docker/
scp -r certs.d/ 103:/etc/docker/
scp -r certs.d/ 104:/etc/docker/

102,103,104主机

yum install -y docker-ce
systemctl enable --now docker
docker info
查看是否有问题
sysctl --system
刷新内核
cd /etc/docker
vim daemon.json
---
{
 "insecure-registries":["reg.westos.org"],
 "registry-mirrors":["https://reg.westos.org"],
 "exec-opts": ["native.cgroupdriver=systemd"],
 "log-driver": "json-file",
 "log-opts": {
  "max-size": "100m"
 },
 "storage-driver": "overlay2"
}
systemctl restart docker
不报错则文件无语法错误
docker info 
查看cgroup driver(systemd),mirrors(reg.westos.org)
注意:使用私有仓库,仓库中必须提前有镜像
---

K8S为什么要部署在docker k8s部署容器_docker_06


K8S为什么要部署在docker k8s部署容器_安装部署_07

3、安装部署软件kubeadm

仓库主机

前提是得已有busyboxplus镜像,没有就pull拉取(联网操作)
docker tag busyboxplus:latest reg.westos.org/library/busyboxplus:latest
docker push reg.westos.org/library/busyboxplus:latest
解析必须正确,否则会报错

102,103,104主机

docker pull busyboxplus

禁用swap分区
swapoff -a
vim /etc/pstab注释掉最后一行

安装部署k8s软件仓库文件
cd /etc/yum.repos.d/
vim k8s.repo
---
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
----

联外网安装
yum install -y kubeadm kubelet kubectl
设置开机自启动
systemctl enable --now kubelet
查看默认配置信息
kubeadm config print init-defaults
images镜像和  repository仓库
rpm -q kubeadm
查看最新安装版本

K8S为什么要部署在docker k8s部署容器_安装部署_08


K8S为什么要部署在docker k8s部署容器_安装部署_09

在harbor浏览器图形界面创建k8s项目,设置公开

K8S为什么要部署在docker k8s部署容器_K8S为什么要部署在docker_10

4、安装部署flannel网络组件

在master节点主机102

默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库:

列出所需镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers 
拉取镜像
kubeadm config images pull --image-repository
registry.aliyuncs.com/google_containers
初始化集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository
registry.aliyuncs.com/google_containers

拉取镜像到k8s项目(先按照上面的拉取,后续可以给镜像改名)

K8S为什么要部署在docker k8s部署容器_运维_11


K8S为什么要部署在docker k8s部署容器_vim_12


K8S为什么要部署在docker k8s部署容器_K8S为什么要部署在docker_13


指定kube配置文件启动集群,此条命令出现在初始化集群时的输出中;也可在文件中配置此环境变量,以免重启主机时每次手动声明

K8S为什么要部署在docker k8s部署容器_vim_14


查看集群发现服务没有完全启动

K8S为什么要部署在docker k8s部署容器_运维_15

安装flannel网络组件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentat
ion/kube-flannel.yml
kubectl apply -f kube-flannel.yml

配置kubectl命令补齐功能:
echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc

docker pull quay.io/coreos/flannel:v0.14.0
docker tag quay.io/coreos/flannel:v0.14.0 reg.westos.org/k8s/flannel:v0.14.0
docker push reg.westos.org/k8s/flannel:v0.14.0

K8S为什么要部署在docker k8s部署容器_docker_16


K8S为什么要部署在docker k8s部署容器_安装部署_17


K8S为什么要部署在docker k8s部署容器_安装部署_18


再次查看pod节点镜像准备情况

K8S为什么要部署在docker k8s部署容器_运维_19


查看节点情况,发现master主机已就绪

K8S为什么要部署在docker k8s部署容器_vim_20


在103和104主机粘贴在master节点主机初始化得出的提示

K8S为什么要部署在docker k8s部署容器_docker_21


K8S为什么要部署在docker k8s部署容器_K8S为什么要部署在docker_22


另外需要在仓库主机也安装部署flannel网络组件集群节点部署成功

K8S为什么要部署在docker k8s部署容器_docker_23


K8S为什么要部署在docker k8s部署容器_vim_24

Master查看状态:
kubectl get cs
kubectl get node
kubectl get pod -n kube-system

K8S为什么要部署在docker k8s部署容器_vim_25

三、排错和注意

1、报错

查看docker信息报错

docker info
WARNING: IPv4 forwarding is disabled
vim  /usr/lib/sysctl.d/00-system.conf
在文件里面添加如下代码:
net.ipv4.ip_forward=1
重启docker、network服务:
systemctl restart network
systemctl restart docker

拉取镜像报错
解析有问题
私有仓库中无内容导致无法拉取

初始化报错

K8S为什么要部署在docker k8s部署容器_vim_26


学会看报错老哥们,内存不够,咱就扩容

K8S为什么要部署在docker k8s部署容器_vim_27


这儿有个坑,在开始配置的时候也应该配好,我是个five我没听到,overdocker登陆有问题

K8S为什么要部署在docker k8s部署容器_运维_28


报错:证书需要依赖。。。。。

修改:docker的权限有问题

#如果没有docker组需要重新创建
[root@master docker]# sudo groupadd docker
groupadd: group 'docker' already exists 
#添加当前用户到docker组中去
[root@master docker]# sudo gpasswd -a ${USER} docker
Adding user root to group docker
#配置daemon.json文件内容
vim /etc/docker/daemon.json
----
{
 "insecure-registries":["reg.westos.org"],
 "registry-mirrors":["https://reg.westos.org"],
 "exec-opts": ["native.cgroupdriver=systemd"],
 "log-driver": "json-file",
 "log-opts": {
  "max-size": "100m"
 },
 "storage-driver": "overlay2"
}
----
#重启docker服务
[root@master docker]# systemctl restart docker

K8S为什么要部署在docker k8s部署容器_安装部署_29


删除镜像

用ID删除时,若有多个ID的容器会无法删除

K8S为什么要部署在docker k8s部署容器_运维_30


需要使用名称来删除

K8S为什么要部署在docker k8s部署容器_运维_31


别人的错

文件里粘贴有缺失,需要在编辑模式粘贴,我同桌傻子

内核没有刷新

2、注意

主机
除仓库外的三台主机设置为双核cpu,若开始时未设置可先关闭主机在virt-manager中小灯泡设置,再次启动即刻生效

网络
在需要pull镜像时需要打开外网,通过实验发现一些镜像需要随缘拉取,速度跟网速挂钩。亲测我同学的网比我快很多,我就刷了两条朋友圈机好了哭哭

镜像拉取
从私有仓库拉取时需要在私有仓库中push了镜像才能拿来使用,否则你就pull了个der