1. kubernetes简介

1.1 Kubernetes概述

  • kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
  • 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,,Borg系统运行管理着成千上万的容器应用。
  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes的好处

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

1.2 kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APls,scheduler,etc),一切都基于分布式的存储系统。

在这里插入图片描述

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:提供集群日志采集、存储与查询

1.3 kubernetes设计理念

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构

在这里插入图片描述

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

2. kubernetes部署

2.1 准备工作

准备4台虚拟机,其中一台做为私有仓库,另外三台部署kubernetes集群

  • 一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS
  • 每台机器 2 GB 以上的内存,内存不足时应用会受限制
  • 主节点上 2 CPU 以上
  • 集群里所有的机器有完全的网络连接,公有网络或者私有网络都可以

step1:做好所有节点的时间同步

可以将宿主机作为一个时间服务器

#在真机
yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v

在这里插入图片描述

在这里插入图片描述
配置虚拟机:

yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v

在这里插入图片描述
在这里插入图片描述

所有节点主机同理配置时间同步

step2:关闭所有节点的selinux和iptables防火墙,所有节点部署docker引擎

#每个节点做好解析
vim /etc/hosts
yum install -y docker-ce docker-ce-cli

在这里插入图片描述

2.2 安装 kubeadm

可以参照官方文档:https://kubernetes.io/zh/docs/setup/independent/create-cluster-kubeadm/
在这里插入图片描述

step1 安装需求:

  • 一台或多台运行着下列系统的机器:
    Ubuntu 16.04+
    Debian 9+
    CentOS 7
    Red Hat Enterprise Linux (RHEL) 7
    Fedora 25+
    HypriotOS v1.0.1+
    Container Linux (测试 1800.6.0 版本)
  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响您应用的运行内存)
  • 2 CPU 核或更多
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
  • 开启机器上的某些端口。
  • 禁用交换分区。为了保证 kubelet 正常工作,您必须禁用交换分区

step2 所有节点主机进行配置:

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

systemctl enable docker
systemctl start docker

在这里插入图片描述

step3 安装 kubeadm、kubelet 和 kubectl

你需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

kubeadm 不能 帮您安装或者管理 kubelet 或 kubectl,所以您需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 间的相差一个次要版本不一致是支持的,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。

#在server2
cd /etc/docker/
vim daemon.json

在这里插入图片描述

#配置yum源
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 repolist
yum install -y kubelet kubeadm kubectl

在这里插入图片描述

在这里插入图片描述

scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/
#做免密处理
ssh-keygen
ssh-copy-id server3
ssh-copy-id server4

在这里插入图片描述

在这里插入图片描述

#在server3和server4上安装
yum install -y kubelet kubeadm kubectl

step4 在控制平面节点上配置 kubelet 使用的 cgroup 驱动程序

可以访问官网参考:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker

#在server2上
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",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]

systemctl daemon-reload
systemctl restart docker
scp daemon.json server3:/etc/docker/
scp daemon.json server4:/etc/docker/

在这里插入图片描述

在这里插入图片描述

#在server3和server4上
systemctl daemon-reload
systemctl restart docker
docker info

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

step5 设置开机自启

#在所有节点
systemctl enable --now kubelet

step6 禁用swap分区

#所有节点
swapoff -a
vim /etc/fstab
注释掉swap定义

在这里插入图片描述

2.3 部署kubernetes集群

step1 拉取镜像

kubeadm config print init-defaults  				#查看默认配置信息

在这里插入图片描述

默认从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 

在这里插入图片描述

在这里插入图片描述step2 初始化集群

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers

--pod-network-cidr=10.244.0.0/16:使用flannel网络组件时必须添加
--kubernetes-version:指定k8s安装版本
在这里插入图片描述

kubeadm token list

在这里插入图片描述

#在server3和server4上节点扩容
kubeadm join 172.25.1.2:6443 --token f4u9ir.gwq06yhhjptjqlyf \
    --discovery-token-ca-cert-hash sha256:55947bba225e0e240d4016b82412e897524a59b425654a0df5e0947835ebff8e 

在这里插入图片描述

在这里插入图片描述

step3 配置kubectl

useradd kubeadm
visudo 
  
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get nodes
kubectl get pod -n kube-system

在这里插入图片描述

在这里插入图片描述

step4 配置kubectl 命令补齐功能

echo "source <(kubectl completion bash)">> ~/.bashrc
source .bashrc

在这里插入图片描述

step5 安装flannel网络组件

Master查看状态:

kubectl get cs
kubectl get node
kubectl get pod-n kube-system

在这里插入图片描述

安装flannel网络组件:

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

在这里插入图片描述

kubectl get pod -n kube-system -o wide

在这里插入图片描述

到此,一个三节点的K8s集群就部署完成了。

kubectl命令指南可以访问官网查看:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

Logo

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

更多推荐