目录

一、介绍

二、架构

1. master(管理节点)

1.1 功能

1.2 节点核心组件

2. node (计算节点)

2.1 功能

2.2 核心组件

3. image (镜像仓库)

3.1 功能

3.2 仓库类型

 三、部署概述

1. k8s官网

2. 部署环境要求:

四、环境配置

1. 修改hosts配置

2. 配置SSH免密登录 

3.  禁用 firewall 和 swap,关闭selinux

4. 时间同步 

5.  修改内核参数

6. 添加网桥过滤和地址转发功能 

7. tc命令 

8. 配置k8s的yum源 

五、安装docker

1. 安装docker依赖

2. 配置yum源 

3. 安装启动docker 

六、安装k8s

1. 安装三大组件-kubeadm、kubelet、kubectl

2. 初始化k8s集群 

3. 加入节点

4. 安装网络插件 calico

5. TAB设置快捷键 

七、验证集群状态


一、介绍

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

二、架构

1. master(管理节点)

1.1 功能

-- 提供对集群的控制
-- 对集群进行全局决策
-- 检测和响应集群事件

1.2 节点核心组件

-- API Server  对外接口,被客户端,组件调用,负责处理接受请求
-- Scheduler 对集群内部分配和调度
-- ControllerManager 管理控制器,相当于"大总管",负责运行不同类型的控制器进程,每个控制器都是一个单独进程
-- etcd 键值数据库,基于go语言,后端元数据存储etcd中,kubernetes在运行过程中产生的元数据全部存储在etcd中

2. node (计算节点)

2.1 功能

-- 运行容器的实际节点
-- 提供运行环境
-- 在多个节点上运行
-- 水平扩产

2.2 核心组件

-- kubelet  (接收apiserver的指令)监视Pod,包括创建,修改,删除,每个Node节点上都会运行一个kubelet,不会管理不是由 Kubernetes 创建的容器
-- kube-proxy  为Pod对象提供网络代理;实现service的通信和负载均衡
-- Runtime 容器管理,负责管理容器的执行和生命周期。支持多种类型的容器运行时环境

3. image (镜像仓库)

3.1 功能

-- 存储镜像
-- 为节点提供镜像支持

3.2 仓库类型

-- Registry
-- Harbor

 三、部署概述

1. k8s官网

官网:https://kubernetes.io

2. 部署环境要求:

-- 内核版本 >= 3,10
-- 最低配置 2cpu,2G内存
-- 节点之中不可以有重复的主机名、MAC地址或product_uuid,网络互通
-- 禁用防火墙
-- 禁用swap

主机名        IP地址最低配置
master192.168.1.502CPU,4G内存
node01192.168.1.512CPU,4G内存
node02192.168.1.522CPU,4G内存

四、环境配置

1. 修改hosts配置

[root@master ~]# vim /etc/hosts
192.168.1.50 master
192.168.1.51 node01
192.168.1.52 node02

2. 配置SSH免密登录 

先生成公钥对,再把公钥远程复制到所有节点

[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id node01
[root@master ~]# ssh-copy-id node02

3.  禁用 firewall 和 swap,关闭selinux

# 禁用swap
[root@master ~]# sed -i '/swap/s/^/#/' /etc/fstab # 永久禁用swap重启后生效
[root@master ~]# swapoff -a # 临时关闭,重启恢复
# 禁用防火墙 
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disabled firewalld
# 关闭selinux
[root@master ~]# setenforce 0
[root@master ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效

4. 时间同步 

执行命令前 可以 使用 rpm -qa |grep chrony 查看系统是否已安装chrony,没有安装环境可使用 yum install chrony 命令安装

#启动chronyd服务
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date 

5.  修改内核参数

[root@master ~]# cat > /etc/modules-load.d/containerd.conf << EOF
> overlay # overlay文件系统模块
> br_netfilter # 网桥防火墙模块
> xt_conntrack # 链接跟踪表模块
> EOF
[root@master ~]# systemctl start systemd-modules-load.service

6. 添加网桥过滤和地址转发功能 

[root@master ~]# cat > /etc/sysctl.d/99-kubernetes-cri.conf << EOF
> net.ipv4.ip_forward = 1 # 开启路由转发
> net.bridge.bridge-nf-call-iptables = 1 # 开启桥流量监控
> net.bridge.bridge-nf-call-ip6tables = 1 # 开启桥流量监控
> net.netfilter.nf_conntrack_max = 1000000 # 设置链接跟踪表大小
> EOF
[root@master ~]# sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.netfilter.nf_conntrack_max = 1000000

7. tc命令 

# 安装tc命令
[root@master home]# yum install -y iproute

8. 配置k8s的yum源 

[root@master ~]# vim /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.gpg

五、安装docker

1. 安装docker依赖

[root@master ~]# yum install -y yum-utils

2. 配置yum源 

[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装启动docker 

[root@master ~]# yum install docker-ce docker-ce-cli containerd.io
[root@master ~]# systemctl enable docker && systemctl start docker
# 配置docker 镜像加速器
[root@master ~]# > cat <<EOF> /etc/docker/daemon.json
{ 	
	"exec-opts": ["native.cgroupdriver=systemd"], 	
	"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
 } 
EOF
# 重启docker
[root@master ~]# systemctl restart docker

六、安装k8s

1. 安装三大组件-kubeadm、kubelet、kubectl

  • kubeadm:用来初始化k8s集群的指令。
  • kubelet:在集群的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与k8s集群通信的命令行工具,查看、创建、更新和删除各种资源。
# 所有节点都安装
[root@master home]# yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9

# 配置kubelet的cgroup
[root@master home]# vim /etc/sysconfig/kubelet
#添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs

# 所有节点设置开机启动
[root@master home]# systemctl enable kubelet --now

2. 初始化k8s集群 

  • apiserver-advertise-address:apiserver监听地址
  • control-plane-endpoint:控制平面的IP地址或DNS名称
  • image-repository:镜像仓库,此处为国内阿里云镜像仓库加速下载
  • service-cidr:为Service分配的IP地址段
  • pod-network-cidr:为pod分配的IP地址段
# 只在主节点执行
kubeadm init \
--apiserver-advertise-address=192.168.31.200 \
--image-repository  registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=172.20.0.0/16 \
--apiserver-advertise-address=$(hostname -I | awk '{print $1}')

初始化需要下载多个镜像,可能时间比较久,最终安装的镜像如下

[root@master ~]# docker images
REPOSITORY                                                                    TAG        IMAGE ID       CREATED         SIZE
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy                v1.20.9    8dbf9a6aa186   2 years ago     99.7MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager   v1.20.9    eb07fd4ad3b4   2 years ago     116MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver            v1.20.9    0d0d57e4f64c   2 years ago     122MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler            v1.20.9    295014c114b3   2 years ago     47.3MB
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd                      3.4.13-0   0369cf4303ff   3 years ago     253MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns                   1.7.0      bfe3a36ebd25   3 years ago     45.2MB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause                     3.2        80d28bedfe5d   3 years ago     683kB

成功界面:

Your Kubernetes control-plane has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config    
# 上面三行赋予权限,就是初始化master节点
 
Alternatively, if you are the root user, you can run:
 
  export KUBECONFIG=/etc/kubernetes/admin.conf
 
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/
 
Then you can join any number of worker nodes by running the following on each as root:
 
kubeadm join 192.168.5.10:6443 --token kdy4ka.jz5otwd1l3l2of5v \
    --discovery-token-ca-cert-hash  sha256:d40fe1c0af2bef8143106d27d418a4b7026f1f79a6dfe30cb4691d35755719ad  
# 上面三行是使计算节点加入master节点

要使非root用户运行kubectl,请执行以下命令,这也是上面kubeadm init输出的一部分: 

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

3. 加入节点

kubeadm join 192.168.5.10:6443 --token kdy4ka.jz5otwd1l3l2of5v \
    --discovery-token-ca-cert-hash sha256:d40fe1c0af2bef8143106d27d418a4b7026f1f79a6dfe30cb4691d35755719ad

查看token列表,可观察到每个token的剩余有效时间

[root@master ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
kdy4ka.jz5otwd1l3l2of5v   7h          2023-10-03T19:46:32+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

默认token有效期为24小时,过期之后token失效,可重新生成token:

[root@master ~]# kubeadm token create --ttl=0 --print-join-command

查看node

[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 20h v1.26.0
node1  Ready <none> 27s v1.26.0

4. 安装网络插件 calico

在虚拟化平台中,比如 OpenStack、Docker 等都需要实现workloads之间互连,但同时也需要对容器做了隔离控制,设置访问策略,calico就可以解决以上所有问题,calico可以让不同节点上的容器实现互联互通,同时可以设置访问策略,它是一个容器之间网络互通的解决方案。

简单来说,实现不同节点上的Pod网络互通。

# 下载calico.yaml并保存到本地
[root@master ~]# curl https://docs.projectcalico.org/v3.15/manifests/calico.yaml -O
修改配置
3888行             - name: CALICO_IPV4POOL_CIDR
3889行               value: "172.20.0.0/16"
# 提交
[root@node1 ~]# kubectl apply -f calico.yaml
# 验证是否成功
[root@node1 ~]# kubectl get pod -A | grep calico
kube-system            calico-kube-controllers-577f77cb5c-s6zfl     1/1     Running   0          15h
kube-system            calico-node-7gsfr                            1/1     Running   0          15h
kube-system            calico-node-hb2k8                            1/1     Running   0          15h
kube-system            calico-node-xt4bl                            1/1     Running   0          15h

5. TAB设置快捷键 

自动补全设置,kubectl、kubeadm支持自动补全功能,可以节省大量输入,自动补全脚本由kubectl、kubeadm产生,仅需要在您的shell配置文件中调用即可

[root@master ~]# source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)
[root@master ~]# source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)

七、验证集群状态

# 验证节点工作状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 22h v1.26.0
node1  Ready <none> 106m v1.26.0
node2  Ready <none> 97m v1.26.0

# 验证容器工作状态
[root@master ~]# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-fc945b5f7-qr8j4 1/1 Running 1 (147m ago) 21h
calico-node-9g7n9 1/1 Running 0 36m
calico-node-bwrbx 1/1 Running 0 101m
calico-node-gnwjs 1/1 Running 0 110m
calico-node-qp8nt 1/1 Running 0 53m
calico-node-rd4fw 1/1 Running 1 (147m ago) 21h
calico-node-z7cgz 1/1 Running 0 21m
coredns-844c6bb88b-749tp 1/1 Running 1 (147m ago) 22h
coredns-844c6bb88b-wk4r8 1/1 Running 1 (147m ago) 22h
etcd-master 1/1 Running 1 (147m ago) 22h
kube-apiserver-master 1/1 Running 1 (147m ago) 22h
kube-controller-manager-master 1/1 Running 1 (147m ago) 22h
kube-proxy-9fswd 1/1 Running 0 53m
kube-proxy-grqsh 1/1 Running 0 36m
kube-proxy-gsbvj 1/1 Running 0 101m
kube-proxy-hfbqq 1/1 Running 1 (147m ago) 22h
kube-proxy-xgj4w 1/1 Running 0 110m
kube-proxy-zz5cv 1/1 Running 0 21m
kube-scheduler-master 1/1 Running 1 (147m ago) 22h

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐