【K8S】学习笔记(一)

2 篇文章 1 订阅

一、Kubernetes

kubernetes,简称K8s,是用8 代替8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。

Kubernetes 积累了作为Google 生产环境运行工作负载15 年的经验,并吸收了来自于社区的最佳想法和实践。

1.1、K8S功能

  1. 自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器
  2. 自我修复(自愈能力)
    当容器失败时,会对容器进行重启
    当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
    当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
    如果某个服务器上的应用不响应了,Kubernetes会自动在其它的地方创建一个
  3. 水平扩展:通过简单的命令、用户UI 界面或基于CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
    当我们有大量的请求来临时,我们可以增加副本数量,从而达到水平扩展的效果
  4. 服务发现:用户不需使用额外的服务发现机制,就能够基于Kubernetes 自身能力实现服务发现和负载均衡
    对外提供统一的入口,让它来做节点的调度和负载均衡, 相当于微服务里面的网关
  5. 滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
    添加应用的时候,不是加进去就马上可以进行使用,而是需要判断这个添加进去的应用是否能够正常使用
  6. 版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
  7. 密钥和配置管理:在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署
  8. 存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
    存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
  9. 批处理:提供一次性任务,定时任务;满足批量数据处理和分析的场景

1.2、K8S架构组件

在这里插入图片描述

1.2.1、架构细节

K8S架构主要包含两部分:Master(主控节点)和 node(工作节点)
K8S集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

master:主控节点

  • API Server:集群统一入口,以restful风格进行操作,同时交给etcd存储
    • 提供认证、授权、访问控制、API注册和发现等机制
  • scheduler:节点的调度,选择node节点应用部署
  • controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
  • etcd:存储系统,用于保存集群中的相关数据

Work node:工作节点

  • Kubelet:master派到node节点代表,管理本机容器

    • 一个集群中每个节点上运行的代理,它保证容器都运行在Pod中
    • 负责维护容器的生命周期,同时也负责Volume(CSI) 和 网络(CNI)的管理
  • kube-proxy:提供网络代理,负载均衡等操作

  • 容器运行环境【Container Runtime

    • 容器运行环境是负责运行容器的软件
    • Kubernetes支持多个容器运行环境:Docker、containerd、cri-o、rktlet以及任何实现Kubernetes CRI (容器运行环境接口) 的软件。
  • fluentd:是一个守护进程,它有助于提升 集群层面日志

1.3、K8S核心概念

1.3.1、Pod

  • Pod是K8s中最小的单元
  • 一组容器的集合
  • 共享网络【一个Pod中的所有容器共享同一网络】
  • 生命周期是短暂的(服务器重启后,就找不到了)

1.3.2、Volume

  • 声明在Pod容器中可访问的文件目录
  • 可以被挂载到Pod中一个或多个容器指定路径下
  • 支持多种后端存储抽象【本地存储、分布式存储、云存储】

1.3.3、Controller

  • 确保预期的pod副本数量【ReplicaSet】
  • 无状态应用部署【Deployment】
    • 无状态就是指,不需要依赖于网络或者ip
  • 有状态应用部署【StatefulSet】
    • 有状态需要特定的条件
  • 确保所有的node运行同一个pod 【DaemonSet】
  • 一次性任务和定时任务【Job和CronJob】

1.3.4、Deployment

  • 定义一组Pod副本数目,版本等
  • 通过控制器【Controller】维持Pod数目【自动回复失败的Pod】
  • 通过控制器以指定的策略控制版本【滚动升级、回滚等】

1.3.5、Service

  • 定义一组pod的访问规则
  • Pod的负载均衡,提供一个或多个Pod的稳定访问地址
  • 支持多种方式【ClusterIP、NodePort、LoadBalancer】

1.3.6、Label

label:标签,用于对象资源查询,筛选

1.3.7、Namespace

命名空间,逻辑隔离

  • 一个集群内部的逻辑隔离机制【鉴权、资源】
  • 每个资源都属于一个namespace
  • 同一个namespace所有资源不能重复
  • 不同namespace可以资源名重复

1.3.8、API

我们通过Kubernetes的API来操作整个集群

同时我们可以通过 kubectl 、ui、curl 最终发送 http + json/yaml 方式的请求给API Server,然后控制整个K8S集群,K8S中所有的资源对象都可以采用 yaml 或 json 格式的文件定义或描述

如下:使用yaml部署一个nginx的pod

二、搭建K8S

2.1、K8S搭建规划

2.1.1、单master集群

在这里插入图片描述

2.1.2、多master集群

在这里插入图片描述

2.2、kubeadm方式安装

2.2.1、系统初始化

关闭防火墙:

systemctl stop firewalld #临时
systemctl disable firewalld # 永久

关闭 selinux

sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config # 永久【重启生效】
setenforce 0 # 临时

关闭 swap:

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久【重启生效】

在== master ==添加 hosts:

cat >> /etc/hosts << EOF
192.168.60.151 k8smaster
192.168.60.152 k8snode1
192.168.60.153 k8snode2
EOF

将桥接的 IPv4 流量传递到 iptables 的链:

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

sysctl --system   # 生效

时间同步:

yum install ntpdate -y
ntpdate time.windows.com

2.2.2、安装K8S

2.2.2.1、安装 Docker

所有节点安装

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker

#阿里云的yum源
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
#安装 docker
yum -y install docker-ce-18.06.1.ce-3.el7

#设置docker开机自启与启动docker
systemctl enable docker && systemctl start docker

# 查看 docker 版本
docker --version

docker 添加阿里云 YUM 软件源

cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
2.2.2.2、安装 kubeadm,kubelet 和 kubectl

所有节点安装
添加 yum

# 配置 k8s 的 yum 源【阿里云】
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

# 安装 kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 设置开机自启【这里暂时先不启动 kubelet】
systemctl enable kubelet
2.2.2.2、部署 Kubernetes Mast

Master上执行

kubeadm init --apiserver-advertise-address=192.168.3.34 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

安装成功会提示kubeadm 指令(每个人不一样),先复制下来到Node结点执行

kubeadm join 192.168.3.34:6443 --token jt1gaq.tvjxyy6bdbr70r95 \
    --discovery-token-ca-cert-hash sha256:68e7c5f64b6e15efe25421a17af0057d013e1f40f55138cb637552449e378be9 

#默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了。这时就需要重新创建 token,操作如下:

Master上执行使用 kubectl 工具:

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

Master上执行查看Node结点是否加进来

kubectl get node

在这里插入图片描述

2.2.2.3、安装 Pod 网络插件(CNI)

raw.githubusercontent.com的地址被污染先去ip查询查询ip
然后在hosts里添加185.199.108.xxx raw.githubusercontent.com

# 下载网络插件配置
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 添加
kubectl apply -f kube-flannel.yml
# 等一会!
# ......
# 查看状态 【kube-system 是 k8s 中的最小单元】
kubectl get pods -n kube-system

嫌麻烦也有我自己下载好久才成功的配置
配置文件

2.2.2.4、测试 kubernetes

在 Kubernetes 集群中创建一个 pod,验证是否正常运行

kubectl create deployment nginx --image=nginx

如果我们出现 Running 状态的时候,表示已经成功运行了
在这里插入图片描述
需要将端口暴露出去,让其它外界能够访问

#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc

在这里插入图片描述
访问地址:http://NodeIP:Port
eg:http://192.168.3.34:32698/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值