1.k8s简介

Kubernetes(k8s)是 Google 开源的容器集群管理系统,其设计源于 Google 在容器编排方面积累的丰富经验,并结合社区创新的最佳实践。Kubernetes 在 Docker容器技术的基础上,大大地提高了容器化部署应用简单高效。经过几年的快速发展,Kubernetes 已经成为建设容器云平台的首选方案。

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

Kubernetes主要由以下几个核心组件组成:

etcd:保存了整个集群的状态 apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理 Container
runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

除了核心组件,还有一些推荐的Add-ons:

kube-dns:负责为整个集群提供DNS服务
Ingress Controller:为服务提供外网入口 Heapster:提供资源监控
Dashboard:提供GUI Federation:提供跨可用区的集群
Fluentd-elasticsearch:提供集群日志采集、存储与查询

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
在这里插入图片描述

核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口层:kubectl命令行工具、客户端SDK以及集群联邦 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

2.k8s的部署

实验环境:
server5是harbor仓库端
新虚拟机:server123

server123:

vim /etc/hosts
harbor仓库的ip要有地址解析
在这里插入图片描述

安装docker
vim /etc/yum.repos.d/docker-ce.repo

[docker]
name=docker-ce
baseurl=http://172.25.76.250/20
gpgcheck=0

yum install docker-ce -y
systemctl enable --now docker
docker info

若出现以下报错则
在这里插入图片描述 cd /etc/sysctl.d/
vim docker.conf

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

sysctl --system

修改驱动
mkdir -p /etc/systemd/system/docker.service.d
cd /etc/docker
vim daemon.json

{
  "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
禁用swap分区
swapoff -a
vim /etc/fstab 注释掉/etc/fstab文件中的swap定义 防止开机自启
在这里插入图片描述
安装部署软件kubeadm
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 kubeleet kubectl
systemctl enable --now kubelet
查看默认配置信息
kubeadm config print init-defaults
在这里插入图片描述server1 2 3 的etc/docker 目录下都需要有认证文件 ca.crt

/etc/docker/certs.d/reg.westos.org/ca.crt

在这里插入图片描述

server3:

kubeadm config images list --image-repository registry.aliyuncs.com/google_containers ## 列出所需镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers ## 拉取镜像(过程有点慢)

docker images 查看
在这里插入图片描述在harbor仓库新建一个项目 (要公开)
在这里插入图片描述

拉取得registry.aliyuncs.com/google_containers改标签为reg.westos.org/k8s/

docker images | grep egistry.aliyuncs.com | awk '{print $1":"$2}' | awk -F/ '{print $3}' | awk '{system("docker tag registry.aliyuncs.com/google_containers/"$1" reg.westos.org/k8s/"$1"")}'

查看修改标签成功

docker images | grep reg.westos.org

在这里插入图片描述上传这些k8s文件

docker images | grep reg.westos.org | awk '{system("docker push "$1":"$2"")}'

在这里插入图片描述提示被拒绝
则登陆
docker login
在这里插入图片描述当出现密码或用户名输入错误的提示时
解决办法: 重新登陆一次

[root@server3 ~]# docker logout reg.westos.org
Removing login credentials for reg.westos.org
[root@server3 ~]# docker login reg.westos.org
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

再来一次

docker images | grep reg.westos.org | awk '{system("docker push "$1":"$2"")}'

在这里插入图片描述成功

初始化集群
用registry.aliyuncs.com/google_container有一个拉取不下来会报错 所以用刚才将所有镜像都上传的私有仓库来初始化就不会出错而且速度快。

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s

生成的kubeadm join 需要待会用来加入集群
在这里插入图片描述
初始化后,提示操作,此处的操作需要复制粘贴保存起来,方便后续使用。
这里我们时root用户,所以选择按照提示配置环境变量。

export KUBECONFIG=/etc/kubernetes/admin.conf

将k8s的指定配置文件写进环境变量
vim .bash_profile
在这里插入图片描述我们需要用kubectl指令来完成后续动作,所以需要在~/.bashrc
中将kubectl补齐的指令写进去

echo "source <(kubectl completion bash)" >> ~/.bashrc
kubectl get pod -n kube-system

我们会发现有状态是pending而不是runnning

在这里插入图片描述原因是没有安装flannel网络组件

3.安装flannel网络组件

3.1.拉取flannel最新版本

网址:https://github.com/coreos/flannel

我们在server3拉取flannel并上传到私有仓库

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

在这里插入图片描述3.2.下载yml文件
直接从网上wget将yml文件下载下来如下:
yum install -y wget
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
vim kube-flannel.yml
只需要改一下镜像的版本
在这里插入图片描述
kubectl apply -f kube-flannel.yml
再次查看k8s的pod状态就都是running状态了
在这里插入图片描述

3.3.加入k8s集群

将刚才初始化生成的指令复制下来,在server1 2上执行,使得他们加入集群

 kubeadm join 172.25.76.3:6443 --token omljmj.uci7zmsmyyxxkmgu --discovery-token-ca-cert-hash sha256:3e04d3f0d04ae1f26bcc71c2f614c3640a92e1e5cf79eb63c8a8267f9b9a25c3 

在master端查看节点状态
要是都是ready就代表成功

kubectl get nodes

在这里插入图片描述
查询状态,以及pod 等都显示正常,集群部署就成功

Logo

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

更多推荐