hydd的Linux笔记Day72

本文详细介绍了Kubernetes Master节点的架构和作用,包括kubeadm的YUM仓库配置、镜像管理、kube-proxy代理模式以及IPVS代理的安装。通过手动步骤展示了Master节点和计算节点的安装过程,强调了网络插件的重要性并提供了flannel的配置和验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Day72

Kubernetes master概述

kubernetes概述

kubebnets介绍

kubectl是谷歌研发的大规模容器管理技术Borg的开源管理Borg的开源版本。可以简写为k8s.

K8S的用途

k8s是一套能够对容器进行更高级更灵活的编排管理和调度等操作的系统。

K8s是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动化扩容缩容、维护等功能。

Kubernetes适用场景

有大量跨主机的容器需要管理

快速部署应用、

快速扩展应用

无缝对接新应用的功能

节省资源,优化硬件资源的使用

Kubernetes架构

核心角色

master(管理节点)

node(计算节点)

image(镜像仓库)

master架构解析

naster是做什么的

Master提供集群的控制,对集群进行全局决策,检测和响应集群事件,Master主要有apiserver,kuberproxy,scheduler,contorllermanager和etcd服务组成

master节点服务

API Server

是整个系统对外的接口,供客户端和其他组件调用,后端元数据存储在etcd中(键值数据库)

Scheduler

​ 负责对集群内部资源进行调度,相当于调度室

Controller manager

负责管理控制器,相当于大总管

etcd

etcd的定义:

​ etcd是CoreOS发起的开源项目,它的目标是构建一个高可用的分布式键值数据库,基于Go语言实现,在分布式系统中,各种服务的配置信息的管理分享,服务发现是一个很基本同时也很重要的问题。

​ kubernetes在运行过程中产生的元数据全部存储在etcd中

etcd键值管理

​ 在键的组织上etcd采用了层次化的空间结构(类似于文件系统中,目录的概念),用户指定的键可以为单独的名字,也可以指定目录结构

​ etcd有kubernetes集群自动管理,无需用户手动干预

​ etcdctl是etcd的客户端管理程序

Kubernetes master

准备工作

基础知识

官网:https://kubernetes.io/

源码&二进制

​ 下载源码或编译好的二进制,手工添加参数启动服务

​ kubernetes采用证书认证的方式,需要创建大量证书

容器

​ 官方把服务做成镜像,下载镜像、启动镜像即可

​ 官方工具kuberadm采用的方式

部署环境要求

内核版本>=3.10

最低配置2cpu,2G内存

节点之间不可以有重复的主机名、MAC地址或者product_uuid

卸载防火墙,禁用swap 禁用selinux

服务端口

协议端口范围软件用途
TCP6443kube-apiserver所有组件接口服务
TCP2379-2380ectdkuber-api,etcd服务
TCP10250kubeletkubelet服务
TCP10251kube-schedulerkube-scheduler服务
TCP10252kube-controller-managerkube-controller-mamnger服务

机器列表

img

kubeadm的YUM仓库

官网下载地址:https://packages.cloud.google.com/

kube-master安装
1、防火墙相关配置

参考前面知识点完成禁用 selinux,禁用 swap,卸载 firewalld-*

2、配置yum仓库
[root@ecs-proxy ~]# cp -a v1.17.6/k8s-install  /var/ftp/localrepo/
[root@ecs-proxy ~]# cd /var/ftp/localrepo/
[root@ecs-proxy localrepo]# createrepo --update .
3、安装工具软件包

安装kubeadm、kubectl、kubelet、docker-ce

kubeadm:用来初始化集群命令的指令

kubelet:在集群中的每个节点上来启动pod和容器等

kubectl:用来与集群通信的命令行工具

docker:容器管理工具

[root@master ~]# yum makecache
[root@master ~]# yum install -y kubeadm kubelet kubectl docker-ce
[root@master ~]# mkdir -p /etc/docker
[root@master ~]# vim /etc/docker/daemon.json 
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://hub-mirror.c.163.com"],
    "insecure-registries":["192.168.1.100:5000", "registry:5000"]
}
[root@master ~]# systemctl enable --now docker kubelet
[root@master ~]# docker info |grep Cgroup
Cgroup Driver: systemd
[root@master ~]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1  #开启桥设备内核监控
net.bridge.bridge-nf-call-iptables = 1	#开启桥设备内核监控
net.ipv4.ip_forward = 1					#开启路由转发
[root@master ~]# modprobe br_netfilter
[root@master ~]# sysctl --system
kubeadm介绍

kubeadm 命令

config:配置管理命令

help:查看帮助

init:初始命令

join:node加入集群的命令

reset:还原状态命令

token: token凭证管理命令

version:查看版本

镜像管理

镜像管理

kubernetes v1.17.6 推荐的部署方式是使用镜像

kubernetes的master各个服务是运行在容器内的

镜像有多个,获取镜像的方法

4、镜像导入私有仓库
# 把云盘 kubernetes/v1.17.6/base-images 中的镜像拷贝到 master
[root@master ~]# cd base-images/
[root@master base-image]# for i in *.tar.gz;do docker load -i ${i};done
[root@master base-image]# docker images
[root@master base-image]# docker images |awk '$2!="TAG"{print $1,$2}'|while read _f _v;do
    docker tag ${_f}:${_v} 192.168.1.100:5000/${_f##*/}:${_v}; 
    docker push 192.168.1.100:5000/${_f##*/}:${_v}; 
    docker rmi ${_f}:${_v}; 
done
# 查看验证
[root@master base-image]# curl http://192.168.1.100:5000/v2/_catalog
5、Tab键设置

kubectl、kuberadm支持自动补全功能,节省大量输入

自动补全脚本由kubectl、kubeadm产生,仅需要在您的shell配置文件中调用即可。

配置完需要退出重新登录才会生效

[root@master ~]# kubectl completion bash >/etc/bash_completion.d/kubectl
[root@master ~]# kubeadm completion bash >/etc/bash_completion.d/kubeadm
[root@master ~]# exit
kube-peoxy代理

kube-proxy是实现Kubernetes Service的通讯与负载均衡的重要组件

kube-proxy代理模式

v1.0,用户空间代理模式

v1.1,iptables模式代理

v1.8,ipvs代理模式如果不安组条件退回至iptables的代理模式

IPVS代理模式

启用条件:

​ 1.内核必须支持ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh,nf_conntrack_ipv4

  1. 必须有ipvsadm和ipset软件包

  2. 配置文件中开启IPVS参数

    mode:ipvs

6、安装IPVS代理软件包
[root@master ~]# yum install -y ipvsadm ipset
7、系统初始化,排错、

根据提示排错若干

[root@master ~]# vim /etc/hosts
192.168.1.21	master
192.168.1.31	node-0001
192.168.1.32	node-0002
192.168.1.33	node-0003
192.168.1.100	registry
[root@master ~]# kubeadm init --dry-run

:–dry-run(排错,可以用来检测环境)

配置文件:

​ 默认的语法配置

​ kubeadm config print init-defaults

​ 默认配置中不会输出组件的配置参数,如果想了解组件的配置参数可以使用参数–component-configs组件参数

可用值:[KubeproxyConfiguration kubeletConfiguration]

8、使用kubeadm部署

应答文件在云盘的 kubernetes/v1.17.6/config 目录下

[root@master ~]# mkdir init;cd init
# 拷贝 kubeadm-init.yaml 到 master 云主机 init 目录下
[root@master init]# kubeadm init --config=kubeadm-init.yaml |tee master-init.log
# 根据提示执行命令
[root@master init]# mkdir -p $HOME/.kube
[root@master init]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master init]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
9、验证安装结果
[root@master ~]# kubectl version
[root@master ~]# kubectl get componentstatuses
NAME                        STATUS      	MESSAGE             	ERROR
controller-manager       	Healthy         ok
scheduler                   Healthy   		ok
etcd-0                 		Healthy   		{"health":"true"}
计算节点安装、

kubenetes nosde是做什么的?

是运行容器的实际节点维护Pod,并提供具体的运行环境

nod由kubelet、kuber-proxy和docket组成

计算节点被设计成为水平拓展,该组件在多个节点上运行

node节点服务

Docker:容器管理

Kubelet:主要负责监视指派到它的容器,包括创建、修改、删除等

kube-proxy:主要负责为容器对象提供代理,实现service通信与负载均衡。

1、获取token

token管理

如何获取token

管理token使用kubeadm token指令

列出token

kubeadm roken list

删除token

kubeadm token delete

创建token

kubeadm token create

创建时参数:–print-join-command 直接打印安装命令

​ --ttl设置token生命周期,0为无限

# 创建token
[root@master ~]# kubeadm token create --ttl=0 --print-join-command
[root@master ~]# kubeadm token list
# 获取token_hash
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der |openssl dgst -sha256 -hex
2、node安装

拷贝云盘上 kubernetes/v1.17.6/node-install 到跳板机

[root@ecs-proxy ~]# cd node-install/
[root@ecs-proxy node-install]# vim files/hosts
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.21    master
192.168.1.31    node-0001
192.168.1.32    node-0002
192.168.1.33    node-0003
192.168.1.100   registry
[root@ecs-proxy node-install]# vim node_install.yaml
... ...
  vars:
    master: '192.168.1.21:6443'
    token: 'fm6kui.mp8rr3akn74a3nyn'
    token_hash: 'sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c'
... ...
[root@ecs-proxy node-install]# ansible-playbook node_install.yaml
3、验证安装
[root@master ~]# kubectl get nodes
NAME        STATUS     ROLES    AGE     VERSION
master      NotReady   master   130m    v1.17.6
node-0001   NotReady   <none>   2m14s   v1.17.6
node-0002   NotReady   <none>   2m15s   v1.17.6
node-0003   NotReady   <none>   2m9s    v1.17.6
手动部署计算节点(以node-0001为例)

1)关闭防火墙和SELinux。

[root@node-0001 ~]# vim /etc/selinux/config... ...SELINUX=disabled
[root@node-0001 ~]# yum -y remove firewalld-*... ...
[root@node-0001 ~]# reboot... ...
[root@node-0001 ~]# sestatus SELinux status:                 disabled

2)配置YUM源

[root@node-0001 ~]# vim  /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever – Localrepo
baseurl=ftp://192.168.1.252/localrepo
enabled=1
gpgcheck=0

3)如果系统中有swap交换分区的话,则禁用该分区,可以在/etc/fstab中禁用。

4)安装软件

[root@node-0001 ~]# yum install -y kubeadm kubelet docker-ce

5)安装IPVS代理

[root@node-0001 ~]# yum install -y ipvsadm ipset

6)修改docker配置,指定使用私有镜像仓库

[root@node-0001 ~]# vim /etc/docker/daemon.json 
{    
"exec-opts": ["native.cgroupdriver=systemd"],    
"registry-mirrors": ["https://hub-mirror.c.163.com"],    
"insecure-registries":["192.168.1.100:5000", "registry:5000"]
}

7)修改内核参数

[root@node-0001 ~]# vim /etc/sysctl.d/k8s.conf      #没有该文件,需要新建文件
net.bridge.bridge-nf-call-ip6tables = 1          # 开启桥设备内核监控(ipv6)
net.bridge.bridge-nf-call-iptables = 1               # 开启桥设备内核监控
(ipv4)net.ipv4.ip_forward = 1                             # 开启路由转发
[root@node-0001 ~]# modprobe br_netfilter          #加载内核模块
[root@node-0001 ~]# sysctl --system                # 加载上面的k8s.conf配置文件
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1... ...

8)修改/etc/hosts

[root@node-0001 ~]# vim  /etc/hosts
::1        localhost    localhost.localdomain    localhost6    localhost6.localdomain6
127.0.0.1    localhost    localhost.localdomain    localhost4    localhost4.localdomain4
192.168.1.21    master
192.168.1.31    node-0001
192.168.1.32    node-0002
192.168.1.33    node-0003
192.168.1.34    node-0004
192.168.1.35    node-0005

步骤二:将node加入K8s集群

1)启动服务器(在node-0001主机操作)

[root@node-0001 ~]# systemctl enable --now docker kubelet

2)查看日志查找下面这一行安装指令的样例(在master主机操作)

kubeadm join 192.168.1.21:6443 --token <token> \--discovery-token-ca-cert-hash   sha256: <token ca hash>

3)如何获取Token Hash值(在master主机操作)

[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |  \
openssl rsa -pubin -outform der |openssl dgst -sha256 -hex
writing RSA key
(stdin)=f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c

4)如何获取Token(在master主机操作)

[root@master ~]# kubeadm token list                # 列出 token
[root@master ~]# kubeadm token delete <token>        # 删除 token
[root@master ~]# kubeadm token create                # 创建 token
[root@master ~]# kubeadm token create --ttl=0 --print-join-command 
... ...
kubeadm join 192.168.1.21:6443 --token fm6kui.mp8rr3akn74a3nyn     --discovery-token-ca-cert-hash
sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c 

5)安装node节点(在node-0001主机操作)

使用刚刚生成的token指令完成node节点安装,下面的Toen和Hash值不能照抄。

[root@node-0001 ~]# kubeadm join 192.168.1.21:6443 --token \
fm6kui.mp8rr3akn74a3nyn --discovery-token-ca-cert-hash sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c

k8s网络插件

flannel实质上是一种覆盖网络也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS、VPC和GCE路由等数据转发方式。

使用flannel目的是不同主机内的容器实现互联互通

flannel镜像

软件地址:https://github.com/coreos/flannel

资源文件:kube-flannel.yml

镜像文件:flannel.tar.gz

img

网络插件安装配置

拷贝云盘 kubernetes/v1.17.6/flannel 目录到 master 上

1、上传镜像到私有仓库
[root@master ~]# cd flannel
[root@master flannel]# docker load -i flannel.tar.gz
[root@master flannel]# docker tag quay.io/coreos/flannel:v0.12.0-amd64 192.168.1.100:5000/flannel:v0.12.0-amd64
[root@master flannel]# docker push 192.168.1.100:5000/flannel:v0.12.0-amd64
2、修改配置文件并安装

只需要在master安装,其他节点会自动完成适配。

[root@master flannel]# vim kube-flannel.yml
128: "Network": "10.244.0.0/16",
172: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
186: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
227-结尾: 删除
[root@master flannel]# kubectl apply -f kube-flannel.yml
3、验证结果

等待几分钟后,nod节点会变成Ready

[root@master flannel]# kubectl get nodes
NAME  		STATUS	ROLES	AGE		VERSION
master		Ready	master	26h		v1.17.6
node-0001	Ready	<none>	151m	v1.17.6
node-0002	Ready	<none>	152m	v1.17.6
node-0003	Ready	<none>	153m	v1.17.6

需要在master安装,其他节点会自动完成适配。

[root@master flannel]# vim kube-flannel.yml
128: "Network": "10.244.0.0/16",
172: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
186: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
227-结尾: 删除
[root@master flannel]# kubectl apply -f kube-flannel.yml
3、验证结果

等待几分钟后,nod节点会变成Ready

[root@master flannel]# kubectl get nodes
NAME  		STATUS	ROLES	AGE		VERSION
master		Ready	master	26h		v1.17.6
node-0001	Ready	<none>	151m	v1.17.6
node-0002	Ready	<none>	152m	v1.17.6
node-0003	Ready	<none>	153m	v1.17.6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值