kubernetes

k8s:

kubernetes:k8s 希腊语,舵手 飞行员。

k8s的作用:

用于自动部署,扩展,管理容器化部署的应用程序。开源(半开源)

k8s的底层是由go语言。

k8s理解成负责自动化运维管理多个容器化的应用的集群。

容器编排框架的工具。

谷歌基于go语言开发的。

k8s的版本:1.18-1.24

1.20————docker

1.24————container

k8s的使用场景:

1、docker部署了一个nginx,--cpu -m 这两个都没有,一旦访问量增大,nginx有可能占满了系统资源。

内存告警,cpu告警

运维人员入场,要么对服务器扩容,要么就重新部署服务。对cpu和内存做限制,防止再一次占满整个服务器。

自动化运维管理:k8s

1)多节点部署,不再是单机部署。

2)自动完成更新和部署。

3)跨节点容器之间的通信问题

4)k8s有自我修复的机制,使得整个容器集群可以在用户的期望状态下运行。

k8s的特点:

1、自我修复,在节点故障时或者容器启动失败,节点故障时,会自动把该节点上的容器重新部署到其他节点。

容器启动失败,启动失败时,他会自动的重新启动容器,3次失败后,就认为该服务不可用。

在容器启动时,也会有检测机制(探针),检测容器启动是否正常

确保集群内部的服务能够正常工作。

2、弹性伸缩,在一个pod(容器)占用机器的资源比较高时,k8s会自动的增加pod的数量,在资源占用下降的时候,会自动释放pod的数量。已最小的成本运行服务。(重点)

3、自动发布(滚动发布模式,默认模式)和回滚

k8s在更新的不是一次性等等更新所有,而是更新一部分,然后再更新剩余的部分。如果有问题,可以随时回滚。

4、服务发现和负载均衡。

多个容器有一个统一的访问入口,内部地址和统一的对外地址。自动负载均衡所有管理的容器。无需考虑容器的IP地址

5、存储编排,支持外挂存储,内部挂载,内部存储卷,

外部挂载,本地存储,也可以公有云。NFS,ceph都可以支持。

6、集中化配置和密钥管理:

k8s所有的配置可以加密的形式保存在集群信息中,提高集群的安全性。

7、任务的批量处理

核心组件(重点):

架构:

主从架构,master-slave模式,我们所有的操作,管理,运维都是在主节点完成。

从节点:node,工作节点,负载工作的节点。
组件:

1、kube-apiserver:这是整个集群当大脑,每个组件之间的资源请求和调用操作都是通过apiserver完成的,通过api接口发送到各个组件。

api接口:内部的组件和组件之间通信的接口,内部调用方法(代码)的接口。程序和程序之间

端口:应用和应用之间,客户端和服务端之间的通信。

所有的资源对象的增删改查和监听都是由apiserver来完成的,处理完之后交给etcd进行存储。

2、ETCD k8s内部的存储服务,分布式的键值存储系统。存储了k8s集群的配置和用户配置,以及集群内部服务的信息。只有apiserver可以和etcd通信,读写权限。其他组件要想往ETCD存储信息或者读取信息必须通过apiserver。

ETCD分布式必须是奇数。1台 3台

3、kube-controller-manager 运行管理控制器

k8s集群当中吃力常规任务的后台的线程,是k8s集群当中所有资源对象自动化控制的中心。

在k8s集群当中,几个资源对应一个控制器。controller-manager就是来管理这些控制器的。

node controller 节点控制器,节点出现故障时,发现和响应

replication controller 副本控制器,我们创建资源对象时,可以选择创建的个数(POD数量)。保证资源对象声明的副本数和创建的数量保持一致。

edpoints controller 端点控制器 service对应的pod。service来匹配对应的pod。监听pod的变化,端点就是暴露出来用于对外访问的

resourcequota controller 资源配额控制器

确保创建的资源对象不会超过设定系统资源量。

namespace controller:项目上进行区分,每个命名空间都是独立的。管理命名空间的生命周期

4、kube-scheduler 根据调度算法,为pod选择一个合适的node节点。

node节点的资源越富裕,负载越小的node节点部署pod的排名就越高。

node节点组件:

1)kubelet 主节点在node节点的监视器,与master节点通信。定时向apiserver报告服务在node节点上的运行情况,接收来自master的调证措施。

kuberlet负责节点上pod的生命周期。

master的指令传给kuberlet,kubelet完成之后,传给apiserver,apiserver把node节点的更新信息保存到etcd。

2)kube-proxy:在每个节点上实现pod的网络代理。是service的具体的载体。负责网络规划和四层负责均衡工作。

iptables和ipvs实现服务的映射和访问。

apiserver通过监控kube-proxy来完成对pod的更新和端点的维护。把变化的结果保存在etcd。

内部服务的负载均衡是四层代理,实现内部pod的负责均衡。

k8s的每个节点上都有kube-proxy。

内部的IP地址:flanner calico这两个插件提供内部pod的IP地址。

3)docker

整个集群的最底层。分布式

k8s的核心概念:

pod:

pod:k8s里面的最小单位,一个pod就是一个正在运行的进程。

pod的里面包含着容器,可以是一个容器,也可以是多个容器。

部署在同一pod当中的容器,共享网络,存储和计算资源。

不同的pod之间只能通过集群分配的IP地址进行通信。

Label:

Label 标签,是k8s的特色管理方式,对资源对象进行分类。

通过标签把pod————service————资源对象————控制器,进行关联。

service:

service 在集群当中每个pod都会设定一个IP地址。可能会因为pod的消失导致IP地址也随之消失。

service就是来解决这个问题的核心概念。service————网关。

ingress:

ingress:service用于集群内部访问。ingress是整个k8s的集群的接入层。整个集群当外部通信。

service是四层负载均衡。只能是ip+端口

ingress是七层转发

www.xy102.com:port————>ingress————>service————>pod

namespace:

namespace 是一种资源隔离的方式,逻辑上的隔离。项目越来越多,集群越来越大。通过命名空间把资源分配到各个命名空间。每个命名空间之间资源不共享,使用的是分配的资源。命名空间在集群当中是唯一的,名字是不能重复的。

default默认命名空间,不做特殊声明,所有的资源都在默认空间

kube-system 系统应用的命名空间。

查询特定的资源,一定要加上命名空间。

三台:

master01 192.168.60.110 etcd

node01 192.168.60.120 docker kubeadm kubelet kubectl flannel

node02 192.168.60.130 docker kubeadm kubelet kubectl flannel

五台:

master01 192.168.60.110 etcd

node01 192.168.60.120 docker kubeadm kubelet kubectl flannel

node02 192.168.60.130 docker kubeadm kubelet kubectl flannel

master02

master03

三台机器一起操作:

[root@k8s1 ~]# systemctl stop firewalld.service 
[root@k8s1 ~]# setenforce 0
[root@k8s1 ~]# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
[root@k8s1 ~]# swapoff -a
[root@k8s1 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
[root@k8s1 ~]# for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
[root@k8s1 ~]# date
2024年 08月 26日 星期一 13:55:14 CST
​
———————————————————————————————————————————————单独操作—————————————————————————————————————————————————————
[root@k8s1 ~]# hostnamectl set-hostname master01
[root@k8s2 ~]# hostnamectl set-hostname node01
[root@k8s3 ~]# hostnamectl set-hostname node02
[root@k8s1 ~]# su
————————————————————————————————————————————————————————————————————————————————————————————————————————————
​
[root@master01 ~]# vim /etc/hosts
192.168.60.110 master01
192.168.60.120 node01
192.168.60.130 node02
​
​
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
​
​
[root@master01 ~]# sysctl --system
​
[root@master01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 
[root@master01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
[root@master01 ~]# yum install -y docker-ce-24.0.1 docker-ce-cli-24.0.1 containerd.io
​
​
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://hub.littlediary.cn/"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF
[root@master01 ~]# systemctl daemon-reload 
[root@master01 ~]# systemctl restart docker
[root@master01 ~]# systemctl enable docker
​
[root@master01 ~]# docker info | grep "Cgroup Driver"
 Cgroup Driver: systemd
​
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
​
[root@master01 ~]# yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
​
[root@master01 ~]# systemctl enable kubelet #所有的组件都是以pod的运行的,必须要设置开机自启
[root@master01 ~]# kubeadm config images list --kubernetes-version 1.20.15
—————————————————————————————————————————————master上操作————————————————————————————————————————————————————
kubeadm init \
--apiserver-advertise-address=192.168.60.110 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.15 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0
​
下面截图的部分复制到两个node命令行中
​
kubeadm token create --print-join-command       #生成新的token验证
​

下面的复制出来加入到主节点

pause:镜像,特殊容器,这个容器的作用就是保持pod当中其他的容器的运行。

我们装pod,首先是拉取镜像,pod当中会有一个pause,pause会在每个pod中创建一个网络命名空间。

pod的生命周期结束,pause容器也会退出,释放该pod的网络命名空间。

pod————镜像————容器

coredns:域名解析

​
--apiserver-advertise-address   ##内部通信的IP地址,指向主,也可以用0.0.0.0表示主机
--image-repository registry.aliyuncs.com/google_containers \    ##指向镜像的仓库————>k8s组件的仓库地址
--kubernetes-version=v1.20.15 \     ##k8s的版本   1.20
--service-cidr=10.96.0.0/16 \       ##service网段
--pod-network-cidr=10.244.0.0/16 \      ##pod分配的网段,10.244.0.0/16 flannel的默认网段。calico:192.168.0.0/16
--token-ttl=0           #token永不过期,内部使用,不加的话,默认就是一天。
  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值