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引擎,负责本机的容器创建和管理。
在这里插入图片描述

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的分层架构
在这里插入图片描述
核心层: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均做
在这里插入图片描述
在这里插入图片描述
server1、server2和server3做相同的操作。
在这里插入图片描述
禁用交换分区,server1、server2和server3做如下操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将repo文件拷贝到node节点
在这里插入图片描述
安装工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置kubelet开机自启
在这里插入图片描述
查看默认配置
在这里插入图片描述
预先拉取镜像,这里报错了。
在这里插入图片描述
重新下载
在这里插入图片描述
查看下载的镜像
在这里插入图片描述
在master节点进行初始化操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
新建用户
在这里插入图片描述
安装网络组件
在这里插入图片描述
将node节点加入集群(这一步在node节点上执行)
下图仅展示了server3节点
在这里插入图片描述
发现cs出现unhealthy的问题

四、解决报错

在这里插入图片描述
将master节点两个配置文件的port=0注释掉
在这里插入图片描述
在这里插入图片描述
重新获取节点发现正常
在这里插入图片描述
接下来检查server1、server2和server3的防火墙、selinux等。重新加入集群
在这里插入图片描述
在这里插入图片描述
成功
在这里插入图片描述

五、补充

注意:将master的内存调大一点,免得出现如下问题。
在这里插入图片描述
调大之后正常了
在这里插入图片描述
当删除一个pod,它会立马重建。
在这里插入图片描述
要删除的话直接删除deployment控制器
在这里插入图片描述
扩容与缩容
在这里插入图片描述
更新镜像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看记录并回滚
在这里插入图片描述
设置暴露端口
在这里插入图片描述
实现了负载均衡
在这里插入图片描述
删除svc
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值