k8s 一之k8s的介绍及部署

文章目录

  • 一、k8s介绍
    • 1.k8s是什么?
    • 2.k8s的优点
    • 3.k8s的设计架构
    • 4.k8s的核心组件集中解释
    • 5.还有一些推荐的Addons
  • 二、k8s部署
    • 安装步骤
  • 三、k8s部署实验截图
  • 四、解决报错
  • 五、补充

一、k8s介绍

1.k8s是什么?

k8s中文社区

在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。
Kubernetes是Google于2014年创建管理的,是Google10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。可以说Kubernetes是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

2.k8s的优点

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

3.k8s的设计架构

k8s集群由Master节点和Node(Worker)节点组成。
Master节点:指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。
在Master上主要运行着:
Kubernetes Controller Manager(kube-controller-manager):k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
Kubernetes Scheduler(kube-scheduler): 负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。
etcd:保存整个集群的状态。
Node节点:除了master以外的节点被称为Node节点或者Worker节点,可以在master中使用命令 kubectl get nodes 查看集群中的Node节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。
在Node上主要运行着:
kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能。
kube-proxy:实现service的通信与负载均衡
docker(Docker Engine):Docker引擎,负责本机的容器创建和管理。
k8s 一之k8s的介绍及部署_第1张图片

4.k8s的核心组件集中解释

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

5.还有一些推荐的Addons

kube-dns:负责为整个集群提供DNS服务
Ingress Controller:为服务提供外网入口
Heapster:提供资源监控
Dashboard:提供GUI
Federation:提供跨可用区的集群
Fluentd-elasticsearch:提供集群日志采集、存储与查询
Kubernetes设计理念和功能: 其实就是一个类似Linux的分层架构
k8s 一之k8s的介绍及部署_第2张图片
核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境。
应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)。
管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)。
接口层:kubectl命令行工具、客户端SDK以及集群联邦
生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴。
Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等。
Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等。

二、k8s部署

安装步骤

k8s官方网站

1.关闭所有节点的selinux和iptables防火墙

2.所有节点部署docker引擎
yum install -y docker-ce docker-ce-cli
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system
systemctl enable docker
systemctl start docker

编辑所有节点 vim /etc/docker/daemon.json
调整docker启动参数(主要是把Cgroup驱动换成systemd驱动获得稳定的运行环境)
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
  	"max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
  	"overlay2.override_kernel_check=true"
  ]
}

mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker

3.禁用swap分区
swapoff -a
vim /etc/fstab      #注释掉/etc/fstab文件中的swap那行

4.安装部署软件kubeadm
首先配置一个k8s的阿里云源
vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

安装工具
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

5.列出所需镜像 
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

6.拉取镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

7.初始化集群(在master上做)
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安装版本
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

如果所使用的用户不是root而是kubeadm的话初始化集群之后进行如下操作:
useradd kubeadm
vim /etc/sudoers
kubeadm ALL=(ALL) NOPASSWD: ALL
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

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

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

10.将node节点加入集群(此命令可以在master节点上找到)
kubeadm join --token b3a32e.7cef20447b55261e 172.25.0.11:6443 --discovery-token-ca-cert-hash sha256:bc718df41fdceb0db6c5380c7e27c204589b41dcb5f9a3bc52c254b707377f2f

11.在master节点上查看
kubectl get cs
kubectl get node
kubectl get pod -n kube-system

三、k8s部署实验截图

server1、server2和server3均做
k8s 一之k8s的介绍及部署_第3张图片
k8s 一之k8s的介绍及部署_第4张图片
server1、server2和server3做相同的操作。
k8s 一之k8s的介绍及部署_第5张图片
禁用交换分区,server1、server2和server3做如下操作。
在这里插入图片描述
k8s 一之k8s的介绍及部署_第6张图片
k8s 一之k8s的介绍及部署_第7张图片
将repo文件拷贝到node节点
k8s 一之k8s的介绍及部署_第8张图片
安装工具
k8s 一之k8s的介绍及部署_第9张图片
k8s 一之k8s的介绍及部署_第10张图片
k8s 一之k8s的介绍及部署_第11张图片
设置kubelet开机自启
k8s 一之k8s的介绍及部署_第12张图片
查看默认配置
k8s 一之k8s的介绍及部署_第13张图片
预先拉取镜像,这里报错了。
k8s 一之k8s的介绍及部署_第14张图片
重新下载
k8s 一之k8s的介绍及部署_第15张图片
查看下载的镜像
k8s 一之k8s的介绍及部署_第16张图片
在master节点进行初始化操作
k8s 一之k8s的介绍及部署_第17张图片
k8s 一之k8s的介绍及部署_第18张图片
k8s 一之k8s的介绍及部署_第19张图片
新建用户
k8s 一之k8s的介绍及部署_第20张图片
安装网络组件
k8s 一之k8s的介绍及部署_第21张图片
将node节点加入集群(这一步在node节点上执行)
下图仅展示了server3节点
k8s 一之k8s的介绍及部署_第22张图片
发现cs出现unhealthy的问题

四、解决报错

k8s 一之k8s的介绍及部署_第23张图片
将master节点两个配置文件的port=0注释掉
k8s 一之k8s的介绍及部署_第24张图片
k8s 一之k8s的介绍及部署_第25张图片
重新获取节点发现正常
k8s 一之k8s的介绍及部署_第26张图片
接下来检查server1、server2和server3的防火墙、selinux等。重新加入集群
k8s 一之k8s的介绍及部署_第27张图片
k8s 一之k8s的介绍及部署_第28张图片
成功
k8s 一之k8s的介绍及部署_第29张图片

五、补充

注意:将master的内存调大一点,免得出现如下问题。
k8s 一之k8s的介绍及部署_第30张图片
调大之后正常了
k8s 一之k8s的介绍及部署_第31张图片
当删除一个pod,它会立马重建。
k8s 一之k8s的介绍及部署_第32张图片
要删除的话直接删除deployment控制器
k8s 一之k8s的介绍及部署_第33张图片
扩容与缩容
k8s 一之k8s的介绍及部署_第34张图片
更新镜像
k8s 一之k8s的介绍及部署_第35张图片
k8s 一之k8s的介绍及部署_第36张图片
k8s 一之k8s的介绍及部署_第37张图片
查看记录并回滚
k8s 一之k8s的介绍及部署_第38张图片
设置暴露端口
k8s 一之k8s的介绍及部署_第39张图片
实现了负载均衡
k8s 一之k8s的介绍及部署_第40张图片
删除svc
k8s 一之k8s的介绍及部署_第41张图片

你可能感兴趣的:(linux企业学习,linux,运维)