IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> day1---docker的基础知识回顾--k8s安装准备工作(1) -> 正文阅读

[系统运维]day1---docker的基础知识回顾--k8s安装准备工作(1)

使用Docker容器化封装应用程序的意义(好处)

三个统一有着跨时代的意义

1、docker引擎统一了基础设施环境 - docker环境
硬件的配置
操作系统的版本
运行时环境的异构
2、docker引擎统一了程序打包(装箱)方式- docker镜像
java程序
python程序
nodejs程序
3、docker引擎统一了程序部署(运行)方式-docker容器
java-jar … ->docker run…
python manage.py runserver …-> docker run …
npm run dev-> docker run …

使用docker容器化封装应用程序的缺点(坏处)

1、单机使用,无法有效集群
2、随着容器数量的额上升,管理成本攀升
3、没有有西欧昂的容灾/自愈机制
4、没有与设编程的版本,无法实现快速,大规模容器调度
5、没有统一的配置管理中心工具
6、没有容器生命周期的管理工具 (状态没人管)
7、没有图形化运维管理工具

----- 因此,我们需要一套容器编排的工具
基于docker容器的引擎的开源容器编排工具目前在市场上主要有:
docker compose 。docker swarm
Mesosphere + Maratheon
kubernetes (k8s) ----谷歌开源的管理容器的工具
占领市场,拥有话语权

k8s安装部署的环境准备

k8s的概述::::

  • 官网地址:https://kubernetes.io/ 有空了可以多看看
  • https://github.com/kubernetes/kubernetes
  • https://www.kubernetes.org.cn/replication-controller-kubernetes
    什么是k8s:::简单的介绍下
    Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
    Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验 的基础上,结合了社区中最好的想法和实践。
  • 开源容器编排框架工具(生态极其丰富)
  • 学习k8s的意义::解决了裸跑docker的若干痛点
    在这里插入图片描述

kubernetes优势

1、自动装箱,水平扩展,自我修复
2、服务发现和负载均衡
3、自动发布(默认滚滚动发布模式)和回滚
4、集中化配置管理和秘钥管理
5、存储编排
6、任务批处理运行

官网介绍:

kubernetes快速入门

四组基本概念

  • pod/pod控制器
  • name/namespace
  • Label/Label选择器
  • Service/Ingress

Pod

  • pod是k8s里能够运行的最小的逻辑单元(原子单元)
  • 1个pod里面可以运行多个容器,它们共享UTS+NET+IPC名称空间
  • 可以把Pod理解为豌豆荚,而同一个Pod内的每个容器是一颗颗豌豆
  • 一个Pod里运行多个容器,又叫:边车(SideCar)默认

Pod控制器

  • Pod控制器是Pod启动的一个模板,用来保证在K8S里启动的Pod应始终按照人们的预期运行(副本数,声明周期,健康状态检查。。)
  • k8s内提供了众多的Pod控制器,常用的有以下几种
    • Deployment ----部署
    • DaemonSet —每一个节点都起一份
    • ReplicaSet
    • StatefulSet —管理有状态的应用
    • Job —一次计划任务
    • Cronjob ----计划任务

Name

  • 由于k8s内部,使用资源来定义每一种逻辑概念(功能),故每一种资源,都应该有自己的名称
  • 资源有api版本(APIVersion)类表(kind)元数据(metadata),定义清单(spec),状态(status)等配置信息
  • 名称 通常顶一个在资源的元数据信息里

Namespace

  • 随着项目的增多,人员的增加,集群规模的扩大,需要一种能够隔离k8s内部各种资源的方法,就是名称空间
  • 名称空间可以理解为k8s内部的虚拟集群组
  • 不同名称空间内的资源,名称可以相同,相同名称空间内的同种资源,名称不能相同
  • 合理的使用k8s的名称空间,使得集群管理员能够更好的对交付到k8s的服务进行分类管理和浏览
  • k8s里默认存在的名称空间有:default,kube-system ,kube-public
  • 查看询k8s特定的资源要带上相应的名称空间

Label

  • 标签是k8s特色的管理方式,便于分类管理对象
  • 一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系
  • 一个资源拥有多个标签,可以实现 不同维度的管理
  • 标签的组成: key=value
  • 与标签类似的,还有一个注解(annotations)

Label选择器

  • 给资源打上标签后,可以使用标签选择器过滤指定的标签
  • 标签选择器目前有两个:基于等值关系(等于,不等于)和基于集合关系(属于,不属于,存在)
  • 许多资源致辞内嵌标签选择器字段
    • matchLabels
    • matchExpressions
      官网::https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/

Service

  • 在k8s的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这一个IP地址会随着Pod的销毁而消失
  • Service(服务)就是用来解决这个问题的核心概念
  • 一个service可以看做一组提供服务的Pod的对外访问的接口
  • service作用于哪些Pod是通过标签选择器来定义的

Ingress

  • Ingress是k8s集群里工作在OSI网络模型参考下,第7层的应用,对外暴露的接口
  • Service只能进行L4浏览调度,表现形式是ip+port
  • Ingress则可以调度不同业务域,不同URL访问路径的业务流量
    Ingress先去找service,,然后service再去找pod实现功能

k8s的三条网络了解

核心组件

  • 配置存储中心–》etcd服务
    -------理解etcd就相当于四zookeeper一样主要存储是k8s集群的主要信息,可以在理解为mysql一样的,也有自己的高可用机制,其是以键值对方式存储的。
  • 主控(master)节点
    • kube-apiserver服务
      ---------主要是提供了集群的REST API接口(包括鉴权,数据效验以及集群状态变更),,负责其他模块之间的数据交互,承担通信枢纽功能,,是资源配额控制的入口,,,提供完备的集群安全机制。。
    • kube-controller-manager服务
      --------有一系列控制器组成,通过apiservice监控整个集群的状态,并确保集群处于预期的工作状态-- Node Controller ; Deployment Controller ;Service Controller ;Volume Controller ; ENDpoint Controller ;Garbage Controller ;Namespace Controller ;Job Controller ; Resource quta Controller。。。。
    • kube-scheduler服务
      -------主要功能是接收调度pod到适合的运算节点上,,预算策略(predict)优选策略(priorities)
  • 运算节点
    • kube-kubelet服务
      -------简单的说,kubelet的主要功能就是定时从其某个地方后去节点pod的预期状态,(运行什么容器,运行的副本数量,网络或者存储如何配置等待),并调用对应的容器平台接口达到这个状态,,,定时汇报当前节点的状态给apiservice,一供调度的时候使用,,,镜像和容器的清理工作,保证节点上镜像补全占满磁盘空间,退出的容器不会占用太多资源
    • kube-proxy服务
      --------是k8s在每个节点上运行网络代理,service资源的载体,,,建立了pod网络和集群网络的关系(clusterip–podip)
      -------常用三种流量调度模式
      -------------Userspace(废弃)
      -------------Iptables(濒临废弃)
      -------------Ipvs(推荐)----就是在k8s里面内嵌一套lvs
      -------负责建立和删除包括更新调度规则,通知apiservice自己的更新,或者从apiservice哪里获取其他kube-proxy的调度规则变化来更新自己的

k8s的网络模型

在这里插入图片描述
service网络在实验的时候是一个虚的网络。。用192.168.0.0/16位表示
地址简单规划
在这里插入图片描述
4代表的是机房,7代表的是不同的环境。。自己规划的时候有这个想法就行。。

CLI客户端

  • kubectl

核心附件

  • CNI网络插件–》flannel/calico
  • 服务发现用插件–》coredns
  • 服务暴露用插件–》traefik
  • GUI管理插件–》Dashboard

实验架构部署

在这里插入图片描述

实验架构图
在这里插入图片描述

要想多加一台需要在11上多加一个节点

常见的k8s安装部署方法

  • Minikube 单节点微型看是(仅供学习,预览使用)
    ----官方网站:https://kubernetes.io/docs/tutorials/hello-minikube/ 和网络快慢有关,,自己去看就行哈
  • 二进制安装部署(生产首选,新手推荐)
  • 使用kubeadmin进行部署,k8s的部署工具,跑在k8s里(相对简单,熟手推荐)

准备k8s部署需要的主机–虚拟机

10.4.7.11
10.4.7.12
10.4.7.21
10.4.7.22
10.4.7.200
网络调整通,然后就是保证能ping通百度。。
另外我这边做了一个工作就是准备了自己的yum仓库配置。。

1、修改主机的名称

[root@localhost ~]# hostnamectl set-hostname host7-11.host.com
[root@localhost ~]# su
[root@localhost ~]# hostnamectl set-hostname hdss7-12.host.com
[root@localhost ~]# su
[root@localhost ~]# 
[root@localhost ~]# hostnamectl set-hostname hdss7-21.host.com
[root@localhost ~]# su
[root@localhost ~]# hostnamectl set-hostname hdss7-22.host.com
[root@localhost ~]# su
[root@localhost ~]# hostnamectl set-hostname hdss7-200.host.com
[root@localhost ~]# su

附加工作------
配置ansible和为每台主机配置免交互,,这里我以200位例子。
下面是使用脚本进行
首先需要配置yum仓库

[root@hdss7-200 yum.repos.d]# ls
bak  local.repo
[root@hdss7-200 yum.repos.d]# cat /root/yum.sh 
#!/bin/bash
#TARFILE=schj-'date +%s'.tgz
mount /dev/cdrom /mnt/
touch /etc/yum.repos.d/local.repo
mkdir /etc/yum.repos.d/bak
cd /etc/yum.repos.d && \
mv C* bak/
echo -e '[base]\nname=CentOS7.6\nbaseurl=file:///mnt\nenabled=1\ngpgcheck=0\n#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'>/etc/yum.repos.d/local.repo
echo '/dev/cdrom iso9660 defaults 0 0' >>/etc/fstab
yum clean all
yum makecache
systemctl stop firewalld
systemctl disable firewalld
se_cnf="/etc/selinux/config"
find_key="SELINUX="
setenforce 0 &>/dev/null
sed -ri "/^$find_key/c${find_key}disabled" $se_cnf
result="`getenforce`"
if [ $result = Enforing ];then
  echo "selinux关闭失败!"
  exit 10
else
  echo "selinux关闭成功!"
fi

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
echo "或者用下面的源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo"

然后下面的是安装ansible和配置让200主机给所有的主机配置免交互

#!/bin/bash
echo -e -n "请输入\033[34mroot\033[0m用户密码 >>> "
read -p "" pwd
echo -e -n "请输入\033[34m本地ip\033[0m[如:192.168.2.10] >>> "
read -p "" local_ip
subnet=$(echo ${local_ip}|awk -F '.' '{print $1"."$2"."$3}')

yum_task(){
  cmd_exist=$(which $1)
  if [ -z ${cmd_exist} ]
  then
    yum install $1 -y
  fi
}
yum -y install expect
# 自动向传入的IP地址拷贝密钥的函数
create_key(){
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 10
# 发送公钥给对方服务器
spawn ssh-keygen -t rsa
  expect {
    "Enter file" { send "\n"; exp_continue }
    "Enter passphrase" { send "\n"; exp_continue }
    "Enter same" { send "\n"}
  }
expect eof
EOF
}

copy_key () {
#pwd='123'
# 开始 expect 解释器程序
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 30
# 发送公钥给对方服务器
spawn ssh-copy-id root@$1
  expect {
    "yes/no" { send "yes\n"; exp_continue }
    "password:" { send "${pwd}\n"}
  }
expect eof
EOF
}

ssh_port_check(){
  echo '' | telnet $1 22 |grep -o -i Connected  
}

[ -z $(rpm -qa |grep epel-release) ] && yum install -y epel-release
yum_task nmap
yum_task telnet
yum_task ansible

all_ip_list=$(nmap -sP ${subnet}.* | grep -o ${subnet}.*)

host_ip_list=''
for i in ${all_ip_list}
do
  tag=$(ssh_port_check $i 2>/dev/null)
  if [ ! -z ${tag} ]
  then
    host_ip_list="$i ${host_ip_list}"
  fi
  sleep 0.5
done

host_ip_list=${host_ip_list}


if [ ! -f /etc/ansible/hosts-bak ]
then
  cp -p /etc/ansible/hosts /etc/ansible/hosts-bak
fi

if [ ! -f /root/.ssh/id_rsa.pub ]
then
  create_key
fi

echo [group] > /etc/ansible/hosts
for host in ${host_ip_list}
do
  echo ${host} >> /etc/ansible/hosts
done

# 循环把每个 Host 传递给自动拷贝函数
for host in $(ansible all --list-hosts |awk 'NR>1 {print $1}')
#for host in `cat iplist`
do
   echo $host
   copy_key $host
done
ssh-agent bash

# 开始 expect 解释器程序
/usr/bin/expect <<EOF
# 设置捕获字符串后,期待回复的超时时间
set timeout 30
# 发送公钥给对方服务器
spawn ssh-add
  expect {
    "id_rsa:" { send "${pwd}\n"}
  }
expect eof
EOF
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:57:18  更:2021-08-24 16:02:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:57:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计