当前位置: 首页 > news >正文

k8s的开篇学习和安装

k8s的开篇学习

学习网站

参考资料

1。 K8S能干什么

[概述 | Kubernetes](https://kubernetes.io/zh-cn/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do)需要开代理

2。docker资料

https://docs.docker.com/get-started/

3.prometheus资料

https://prometheus.io/docs/introduction/overview/

开篇前言

不能站在上帝视角,一开始就大而全的去理解k8s所有组件,对于新人入门是灾难。
前期,抓住重点,学会安装,应用部署,不断加入新组件,理解该组件能解决什么问题。
才是循序渐进的学习方法

当然,在课余时间,为了掌握这一类重量级的技术,必须得看资料,理解为什么k8s提供那么多组件,以及作用.

为什么要学习k8s

1.1 iptables规则,为了理解防火墙作用、以及实现对数据包的转发,修改作用,源ip:port 目标ip:port 协议等。

1.2 虚拟化kvm

1.3 容器技术,容器,镜像,仓库,网络

1.4 从单个的容器管理命令,升级为yaml形式的资源描述文件,以及提供了相应的编排能力,运行、管理一组多个容器
以及容器之间会共同使用到的,如桥接网络网段,如创建的数据卷Volume,也可以在多个容器之间共享数据。

1.5 问题又来了,你这只是在单机的如docker-200机器上操作一堆容器,容器需要部署在多个机器上呢?
你后端需要运行的一组如4个容器,不能只在一个宿主机上跑吧,那不还是公用的单一的宿主机配置吗?

1.6 因此容器需要跨主机部署,以及配置跨主机的容器通信方案

1.7 以及容器运行在了多个机器上,容器就是你后端么,如何确保对容器的资源使用率监控?容器内服务监控?

是不是也得手工去维护docker?

  1. 如上诸多问题,在容器规模上来,跨机器的部署,就推进了容器编排技术必须要继续发展,开发出强大的编排工具
    解决上述的问题,以及更多的问题。这就是 k8s为什么出现了。

运维的方式就彻底颠覆了,容器多机器编排的工具,必须得有开发代码的编写方式,也彻底的颠覆了系统,都是分开发的,多个小组件运行一个一个容器里

这个就叫做微服务

也就是技术就是一步一步演化而来。

k8s软件介绍

  • 纯docker的运行模式,是docker主机单独的去管理一堆的容器应用,但发现数量多了以后,配置复杂,就难以管理多个容器,并且跨主机下的容器集群,更是维护复杂。
    • 业务数量庞大,那些容器部署在那些节点使用了那些的端口,如何记录,管理,需要登陆到每一台机器去管理。
    • 跨主机的通信,多个机器中的容器之间相互调用如何做,IP tables规则手动维护,
    • 跨主机容器的调用,配置如何写,ip和端口
    • 如何实现业务的高可用性,多个容器对外提供服务如何实现负载均衡。
    • 如何实现滚动升级业务的连续性。

k8s的介绍

  • Kuberneter 也被称为k8s,是用于自动化的部署,扩缩和管理容器应用化程序的开源系统。

  • 他将组成的应用系统组合成逻辑单元,以便于管理和服务发现

  • Kubernets 来源于Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。

  • Google每周运行10亿个容器,kubernets基于相同的设计原理,能够在不扩张运维团队的前提下,进行规模性的管理。

  • 从官方的资料来看,就已经解决了容器化的管理问题。

为什么会出现k8s

部署时代架构

v1 物理机

v2 虚拟化,vmware 商业版为代表,出现开源版的 openstack

v3 容器化部署,容器化大规模应用后,难以维护,出现了

k8s技术

k8s 是一个平台框架

  • k8s提供了很多功能,简化了对容器的部署管理
    • 基于容器对应用的发布管理,更新,升级,降级。
    • 负载均衡,服务发现。
    • 跨机器,跨地区的网络管理模式
    • 自动扩缩容器功能
    • 针对nginx无状态服务运行模式,如mysql等有状态的运行组件
    • 支持丰富的插件。
  • k8s并不是包罗万象,它本身只有自己的组件,而其他的功能,如消息列队,数据库,存储都需要安装在K8S上

k8s的本质是一个大而全的一个平台,组件很多,提供了很多的功能组件,目的是为了更好的管理容器。

  • 所以K8S的组件是专门用来保障,应用的发布的高可用性弹性扩缩
  • 升级降级的一个重要的组件,
  • 还有专门用来维护,网络,存储,等K8S的其他组件
  • 因此学习的路线是1.先学会应用的部署,无状态的应用,2.学习其他的组件,部署容器

k8s核心架构

如何设计一个容器管理平台

  • 集群架构,管理节点分发到数据节点
  • 如何部署业务容器到各个数据节点
  • N个数据节点,业务容器如何选择部署到合理的节点
  • 容器如何实现多副本,如何满足每个机器都部署一个容器模型
  • 多副本如何实现负载均衡

分布式系统分为二种角色:管理节点和工作节点

从系统架构来看,k8s分为2个节点

master 控制节点,包工头

node 工作节点 工人

提供啦很多组件,方便你去各个角度更好的维护,管理容器
1. 容器的高可用性,数量的保障,版本的升级
2, 容器之间的网络关系
3, 容器之间的数据共享关系
4, 容器内的配置文件\
...........
都是K8S提供的各个组件

k8s组件通信架构图

  1. k8s集群,至少需要2台ecs机器
  2. k8s的本身,也是以容器运行
  • k8s集群是被一组被称为Node的节点组成的,这些节点运行K8S管理进程的容器
  • 具体的Node节点机器上运行的容器被叫做pod的组件管理
  • 安装完k8s后,就得到啦一个集群的环境
    • 集群指的是有一堆Node节点的机器,并且这些节点运行pod,也就是容器了。

理解k8s核心几块资源

k8s默认的组件很多,每一个pod控制器(工作负载),以及网络插件组件,没法一个个的去读,前期也都被封装在了底层,也关心不到。

因此,只聊我们能用到的几个组件,如pod创建,需要用到几个组件,需要背一背,以及查看对应的资源,再机器上的容器进程信息。

后续不断的加入新知识,再去理解对应的组件

即可循序渐进的理解,k8s的复杂知识。

当然,建议也是,平日里,看k8s官网文档,以及如k8s权威指南 v5版本的书籍,去阅读理论知识,扩充自己的理论知识,更合适。

v1-v5

上课,为了更快速的,理解,操作,k8s组件该如何玩

  1. 快速学会玩法
  2. 再去看资料理解本质原理

node概念

ECS机器,k8s运行的一个环境。

pod等资源,属于k8s安装好后的,集群内的一个资源信息。

1.k8s工作节点,node,运行环境可以是::::vmware创建的一个虚拟机 ,k8s-node-11 k8s-node-12

2.node上具体运行啥?运行容器,k8s部署的应用,都是跑再容器里,还得装docker

  1. 初始化,运行工作节点,或者主节点,背后逻辑就是
    1. 下载k8s自身的一些组件的镜像
    2. 运行镜像,创建对应的容器,到对应的目标机器上(k8s-master、k8s-node)

k8s-node的部署逻辑图

1. pod的IP是随着变化的,删除pod,ip变化
2. pod内都有一个根容器
4. 一个pod内可以有一个、多个容器
5.一个pod内的所有容器,共享根容器的网络名称空间,文件系统,进程资源
6.一个pod内的容器网络地址,由根容器提供。

k8s集群安装部署

带着理论,再去部署,验证你的理论

  • 准备3台机器,注意配置,别太低,否则跑不起来。

  • 系统初始化配置,如ntp等

主机名、节点ip、部署组件
# k8s kubeadm 一键自动化,安装k8s集群,安装所有运行需要的组件
# k8s-master  10.0.0.10   etcd, kube-apiserver, kube-controller-manager, kubectl, kubeadm, kubelet, kube-proxy, flannelk8s-node1  10.0.0.11  kubectl, kubelet, kube-proxy, flannel,dockerk8s-node2   10.0.0.12 kubectl, kubelet, kube-proxy, flannel,docker确保三台机器,的跨节点的容器互相通信,装网络插件flannel

环境初始化

cat  >>/etc/hosts <<'EOF'
10.0.0.10 k8s-master-10 
10.0.0.11 k8s-node-11
10.0.0.12 k8s-node-12
EOFping -c 2 k8s-master-10
ping -c 2 k8s-node-11
ping -c 2 k8s-node-12

防火墙初始化

systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManagersed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalldgetenforce 0iptables -F
iptables -X
iptables -Ziptables -P FORWARD ACCEPT

关闭swap

k8s默认禁用swap功能

swapoff -a
# 防止开机自动挂载 swap 分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

yum源配置

curl  -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/*.repoyum clean all && yum makecache fast

ntp配置

yum install chrony -ysystemctl start chronyd
systemctl enable chronyddate# 修改配置文件,加入ntp.aliyun.com上游地址即可ntpdate -u ntp.aliyun.comhwclock -w

修改linux内核参数,开启数据包转发功能

# 容器夸主机通通信,底层是走的iptables,内核级别的数据包转发cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.max_map_count=262144
EOFmodprobe br_netfilter
# 加载读取内核参数配置文件
sysctl -p /etc/sysctl.d/k8s.conf

安装docker基础环境()

yum remove docker docker-common docker-selinux docker-engine -y curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum makecache fastyum list docker-ce --showduplicatesyum install docker-ce-19.03.15 docker-ce-cli-19.03.15 -y#配置docker加速器、以及crgoup驱动,改为k8s官方推荐的systemd,否则初始化时会有报错。mkdir -p /etc/docker
# 这里使用的是你自己的华为云的镜像id,不要使用我的这个容器加速镜像
cat > /etc/docker/daemon.json <<'EOF'
{"registry-mirrors": [ "https://58698f75ac8e4e98bbb253a7e9b31657.mirror.swr.myhuaweicloud.com" ]
}
EOF#启动
systemctl start docker && systemctl enable dockerdocker version

安装k8s的初始化

[root@k8s-master-10 ~]#cat init-k8s.sh 
#设置阿里云源curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repocurl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repocat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOFyum clean all && yum makecache#yum list kubeadm --showduplicates   列出,这个阿里云k8s源,提供了哪些k8s版本让你玩
# 这个脚本看懂1111# 安装指定版本 kubeadm-1.19.3   ,安装的kubeadm版本,就是决定了,拉去什么版本的k8s集群版本的镜像yum install kubelet-1.19.3 kubeadm-1.19.3   kubectl-1.19.3 ipvsadm -y

初始化k8s-master主节点(只在主节点执行)

# kubeadm init   初始化,加入一些参数#
kubeadm init \
--apiserver-advertise-address=10.0.0.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.2.0.0/16 \
--service-dns-domain=cluster.local \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPUkubeadm init \
--apiserver-advertise-address=10.0.0.10 \   # api-server运行再k8s-master的ip上
--image-repository registry.aliyuncs.com/google_containers \ # 拉去k8s镜像,从阿里云上获取,否则默认是国外的k8s镜像地址,下载不了
--kubernetes-version v1.19.3 \  # 和kubeadm保持一直
--service-cidr=10.1.0.0/16 \    #  k8s服务发现网段设置,service网段
--pod-network-cidr=10.2.0.0/16 \   # 设置pod创建后,的运行网段地址
--service-dns-domain=cluster.local \ #  k8s服务发现网段设置,service资源的域名后缀
--ignore-preflight-errors=Swap \  # 忽略swap报错
--ignore-preflight-errors=NumCPU  #  忽略cpu数量报错
中间的组件创建过程,以及ssl证书创建过程,暂时不用看,以后回国头再看# k8s-master成功装好了Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:
# 创建k8s集群配置文件
# 制定了,默认的ssl整数在哪,api-server的地址,等mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config======================-===============
# pod分布再多个机器上,pod互相之间链接,得部署,集群网络,选用flannel网络插件
# 安装,使用即可。You should now deploy a pod network to the cluster.
==================================
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/# 使用如下命令,将k8s-node加入集群即可,
Then you can join any number of worker nodes by running the following on each as root:
===================================================# join添加到集群中====================================
[root@k8s-master-10 ~]## k8s-master初始化结果,讲解,听懂6666Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 10.0.0.10:6443 --token gwv20l.vjex2uud3ng450ig \--discovery-token-ca-cert-hash sha256:fce52138a94d585d07015dbf718e39b5ba3c7988021c5ef98bf8af6c5be191dd 
[root@k8s-master ~]# #添加这个join

此时主节点就可以用

查看 k8s集群状态,查看有哪些工作节点

客户端命令
# 可以直接和api-server交互,查询 你要的信息 # 这个命令,默认会去加载ssl证书,确保安全
# 以后再聊,kubectl的整数添加参数
# 再主节点上,使用这个命令是可以直接用的kubectl   get  nodes  # 显示更详细的信息kubectl   get  nodes  -owide
## 查看kubeadm 版本,初始化的k8s版本信息,就是 v1.19.3版本$ kubeadm version[root@k8s-master-10 ~]#kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:47:53Z", Go## 设置kubelet开机启动
systemctl enable kubelet
systemctl enable docker

如何让集群就绪呢?部署网络插件

# 1. 下载网络插件的,配置文件 ,yaml以及配置文件
git clone --depth 1 https://github.com/coreos/flannel.git# 2.再k8s主节点上,应用这个yaml,基于yaml,创建具体的pod过程。# 3.如果需要修改pod运行网络的话,要改配置文件,
/root/flannel-master/Documentation/kube-flannel.yml# 创建k8s资源,都是写这种yml文件了[root@k8s-master-10 ~/flannel-master/Documentation]#grep 'Network' -A 5 kube-flannel.yml "Network": "10.2.0.0/16","Backend": {"Type": "vxlan"}}
---# 修改的第二处,夸主机的容器通信,最终不得走宿主机的物理网卡。
# 告诉flannel的你物理网卡是谁containers:- name: kube-flannel#image: flannelcni/flannel:v0.19.2 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.19.2command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgr- --iface=ens33# 基于kubectl命令,应用这个yml文件,读取,以及创建pod资源[root@k8s-master-10 ~/flannel-master/Documentation]#kubectl create -f ./kube-flannel.yml 
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created# 查看当前机器的容器,关于flannel网络插件的进程
[root@k8s-master-10 ~/flannel-master/Documentation]#docker ps |grep flannel
812ebf6b0578        registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 31 seconds ago      Up 31 seconds                           k8s_POD_kube-flannel-ds-9x4l2_kube-flannel_37b34022-cc0d-47c3-b677-3fe657374dbc_0修改pod网络的网段地址,根据kubeadm init 初始化时,设置的地址来

在这里插入图片描述

相关文章:

  • 灵界猫薄荷×贴贴诱发机制详解
  • 在docker中部署ollama
  • MySQL分库分表面试题深度解析
  • etcd基本数据库操作
  • CKA考试知识点分享(15)---etcd
  • 【Flutter】Widget、Element和Render的关系-Flutter三棵树
  • 萌系盲盒陷维权风暴,Dreams委托David律所已立案,速避雷
  • 破壁虚实的情感科技革命:元晟定义AI陪伴机器人个性化新纪元
  • [每周一更]-(第145期):分表数据扩容处理:原理与实战
  • 34-Oracle 23 ai 示例数据库部署指南、脚本获取、验证与实操(兼容19c)
  • Blender 案例及基础知识点
  • 嵌入式开发中fmacro-prefix-map选项解析
  • 皮卡丘靶场通关全教程
  • c++ 右值引用移动构造函数
  • C#最佳实践:为何要统一命名
  • 「Flink」Flink项目搭建方法介绍
  • 音频水印——PerTh Watermarker
  • 从MVC到MVVM:从过程式走向声明式
  • 鸿蒙系统备份恢复
  • Activiti初识
  • 中国做乱的小说网站/营销方案100个软文
  • 新乡新手学做网站/重庆森林粤语完整版在线观看免费
  • 免费网络电话在线拨打/郑州seo外包顾问
  • 网站关键词优化外包/长沙网站seo报价
  • 做网站需要注册公司吗/链接是什么意思
  • 品牌网球拍有哪些/优化网络培训