k8s入门教学

简介

在部署应用程序上主要经历了三个阶段:

  • 传统部署

直接将应用程序部署在物理机上,计算机自主为应用程序调度资源。

  • 虚拟化部署

一台物理机上运行多个虚拟机,每个虚拟机分配独立的环境与资源

  • 容器化部署

虚拟服务与环境共享物理机资源

在这里插入图片描述

运行在容器上的应用程序都有自己的文件系统,CPU,内存,进程等,容器的运行时环境共享主机的资源。

在容器部署时常遇到的问题是当一个容器宕机后另一容器如何及时顶上,当访问量变大时如何横向扩展容器。这些问题统称为容器编排问题。容器编排的软件:

  • Swarm:docker官方的容器编排工具。
  • Mesos:Apache的一个资源管控工具,需要和Marathon结合使用。
  • Kubernetes:Google开源的容器编排工具。

在这里插入图片描述

Kubernetes本质就是一组服务器集群,它可以在集群上的每个节点上运行特定的程序,来对节点的容器进行管理,目的就是实现资源管理的自动化,主要提供了如下主要功能:

  • 自我修复:一旦某个容器宕机,会迅速找到新的容器补充;
  • 弹性伸缩:根据需要自动对集群中正在运行的容器数量进行调整;
  • 服务发现:服务可以通过自动发现的的形式找到依赖服务;
  • 负载均衡:一个服务启动了多个容器,能够自动实现请求的负载均衡;
  • 版本回退:新发布的版本有问题可以自动回退到旧版本;
  • 存储编排:根据容器自身的需求创建数据卷。

Kubenetes

一个kubenetes集群主要是有控制控制节点master,工作节点node构成,每个节点安装在不同组件。

在这里插入图片描述

扫描二维码关注公众号,回复: 17321647 查看本文章

在这里插入图片描述

Kubernetes集群主要有一下部分:

在这里插入图片描述

集群环境搭建

部分参考自:Ubuntu20.4下安装k8s

  1. 集群类型
    在这里插入图片描述

  2. 安装方式

在这里插入图片描述

  1. 主机规划

在这里插入图片描述
新建三台虚拟机,分别配置静态ip,其IP地址分为为:

主机名 IP地址
xwh(主节点) 192.168.42.128
node(从节点1) 192.168.42.129
server(从节点2) 192.168.42.130

在这里插入图片描述
分别开启

在这里插入图片描述
依次连接

在这里插入图片描述

  1. 配置本地DNS服务器

三台虚拟机连接统一局域网属于统一网段,可以实现互相访问,但是要配置DNS服务器,否者不知道对方存在。

hosts文件就是主机上的本地的DNS服务器,sudo vi /etc/hosts配置配置ip域名的列表,如下

在这里插入图片描述
前一个参数是ip后一个是域名,配置了DNS服务器后本机就记录了局域网中存在的子网的计算机了,就可以通过局域网访问了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上图所示ping一下测试连通性没问题。

  1. 时间同步

kubenetes集群要求集群的的主机及节点的时间必需是一致的,使用chronyd服务实现网络同步时间。

  • 安装
    sudo apt install chrony

  • 启动服务
    sudo systemctl start chronyd

  • 配置开机启动
    sudo systemctl enable chronyd

  • date测试
    在这里插入图片描述

  1. 防止不必要的麻烦关闭防火墙

sudo ufw disable

在这里插入图片描述
在这里插入图片描述

  1. 禁用selinux

参考:UBUNTU 22.04关闭selinux

在这里插入图片描述
/etc/selinux/config

SELINUX=disabled

reboot

Ubuntu目录变了,如下

在这里插入图片描述

在这里插入图片描述

  1. 禁用swap分区

swapoff -a

在这里插入图片描述

sudo vi /etc/fstab

注释有swap的一行。或者直接使用systemctl disable swap.target命令。

在这里插入图片描述
reboot now

Ubuntu20.4下安装k8s

  1. 配置基于kubenetes的配置文件
  • 编辑配置
    在这里插入图片描述

sudo vi /etc/sysctl.d/kubenetes.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

  • 重新加载

sysctl -p

  • 加载网桥过滤模块

sudo modprobe br_netfilter

  • 查看是否成功

lsmod | grep br_netfilter
在这里插入图片描述
在这里插入图片描述

  1. 配置ipvs功能
    在这里插入图片描述
  • 安装ipsetipvsadm

sudo apt -y install ipvsadm ipset sysstat conntrack

  • 写入参数配置
#创建目录
mkdir ~/k8s-init/
#写入参数配置
tee ~/k8s-init/ipvs.modules <<'EOF'
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_lc
modprobe -- ip_vs_lblc
modprobe -- ip_vs_lblcr
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- ip_vs_dh
modprobe -- ip_vs_fo
modprobe -- ip_vs_nq
modprobe -- ip_vs_sed
modprobe -- ip_vs_ftp
modprobe -- ip_vs_sh
modprobe -- ip_tables
modprobe -- ip_set
modprobe -- ipt_set
modprobe -- ipt_rpfilter
modprobe -- ipt_REJECT
modprobe -- ipip
modprobe -- xt_set
modprobe -- br_netfilter
modprobe -- nf_conntrack
EOF
 
  • 文件授权
# 赋权
chmod 755 ~/k8s-init/ipvs.modules

# 执行脚本
sudo bash ~/k8s-init/ipvs.modules

  • 查看模块是否加载成功

lsmod | grep -e ip_vs -e nf_conntrack

在这里插入图片描述
出现如上图所示表示ipvs功能配置完成。到此集群的基本环境也搭建完成了。

安装docker

安装docker时注意docker与k8s版本的对应关系,不要安装最新版本的。

k8s版本匹配关系

sudo apt install docker.io

在这里插入图片描述

在这里插入图片描述

安装kubenetes组件

  • 允许apt在HTTPS上使用存储库:
    apt update && apt install -y apt-transport-https

在这里插入图片描述
如果显示如上所示错误,直接切换root用户再次安装su root,没有root用户就创建sudo passwd root

在这里插入图片描述

  • 添加访问公钥

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

  • 添加源

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF

在这里插入图片描述

  • 安装最新版的kubelet kubeadm kubectl

sudo apt-get install -y kubelet kubeadm kubectl

安装指定版本 sudo apt-get install -y kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00

  • 设置开机启动

systemctl enable kubelet.service

  • 测试安装成功

kubeadm version
在这里插入图片描述

初始化集群

初始化集群只需要再master节点上操作:

sudo kubeadm init \
--kubernetes-version=1.22.1 \
--apiserver-advertise-address=192.168.186.111 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers

 
#kubernetes-version,是k8s的版本,不设置默认是最新
#apiserver-advertise-address是填 master节点的IP
#pod-network-cidr pod的网络,取决了flannel的网络(本文)
#image-repository 镜像源地址

报错如下:
在这里插入图片描述

container runtime is not running: output: time="2023-09-18T02:45:06Z" level=fatal msg="validate service 
connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc 
error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"

解决方案:

rm -rf /etc/containerd/config.toml

systemctl restart containerd

在此运行,如下

在这里插入图片描述
在这里插入图片描述

又报错,如下 It seems like the kubelet isn't running or healthy

在这里插入图片描述

sudo vi /etc/docker/daemon.json

{
    
    
        "exec-opts": ["native.cgroupdriver=systemd"],
        "registry-mirrors": ["https://registry.docker-cn.com"]
}

systemctl daemon-reload

sudo systemctl restart docker

sudo systemctl restart kubelet

由于之前已经初始化一次后现在无法再次初始化,需要先删除之前初始化的文件,一方面可以手动删除,也可以通过组件删除。

k8s初始化失败,重新初始化

kubeadm reset

sudo kubeadm init \
--apiserver-advertise-address=192.168.42.128 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers

经过上述步骤,初始化k8s还是起不动,查看发现时kubelet停止了,如下:

在这里插入图片描述
使用kubectl version

在这里插入图片描述
查看kube的日志 journalctl -fu kubelet
在这里插入图片描述

failed to run Kubelet: running with swap on is not supported, please disable swap

重新禁用swap分区就可以了。

又遇到一个新错误[kubelet-check] Initial timeout of 40s passed缺少关键文件,网站咨询。

  • 安装网络组件
#使用gitee,github因为网络原因可能无法正常下载
git clone --depth 1 https://gitee.com/CaiJinHao/flannel.git
 
#安装
kubectl apply -f flannel/Documentation/kube-flannel.yml
 
#查看pod状态,当flannel状态为Running的时候就表示安装完成
kubectl get pod -n kube-system
  • 配置kube-proxy开启IPVS模式
kubectl edit configmap kube-proxy -n kube-system
#把原来mode配置为ipvs,默认是空
 42     kind: KubeProxyConfiguration
 43     metricsBindAddress: ""
 44     mode: "ipvs"
 45     nodePortAddresses: null
  • 重启kube-proxy pod,并且查看状态
#删除pod重新运行
kubectl delete pod -n kube-system kube-proxy-mtkns
 
#查看状态
ipvsadm -Ln
  • 添加节点
#运行此命令把其他node节点加入集群,具体命令是自己集群kubeadm初始化完成之后的提示命令中
kubeadm join 192.168.186.111:6443 --token hhwuqb.cs92xded67e0cj8v \
        --discovery-token-ca-cert-hash sha256:6f318d778732870d8b9fdaacf8522c47fe28a1d441da0db90f14535484f5434c

猜你喜欢

转载自blog.csdn.net/xwh3165037789/article/details/132879122
k8s