K8s安装部署--超级详细(无坑,v1.23)

K8s安装

准备阶段

机器配置

!!!除了对master的操作,前面的操作均需在每一台虚拟机进行

机器:4台机器(看实体机配置,实在不行准备两台到三台,其中一台作为master机器,管理其他node机器)

参数:2核1线程,2G内存,20G硬盘

系统:CentOS 7

  1. 为每台虚拟机修改主机名,使用hostnamectl set-hostname 需要设置主机名,用于区分不同的虚拟机。
    请添加图片描述
  2. 为每台机器配置静态IP:
  • 修改配置时建议将原本的文件备份保存,配置出错可以通过备份文件恢复(这个备份方法直接cv原来文件内容到实体机文件都可)

  • 静态IP设置方法
    在/etc/sysconfig/network-scripts/ifcfg-ens33修改如下

    # 将BOOTPROTO从dhcp改为static或none
    BOOTPROTO="static"
    # 若没有ONBOOT添加
    ONBOOT="yes"
    # 下面的都需要添加,如果在桥接模式下ip地址要和实体机相同网段,网关要和实体机网关相同。如果是nat则和nat网段相同。我这里用192.168.*.*代替要配置的,记得改(一定要注意IP地址和网关)
    IPADDR="192.168.*.*"
    PREFIX="24"
    GATEWAY="192.168.*.*"
    #DNS服务器可以只配置一个,当然也可以配置两个
    DNS1="114.114.114.114"
    DNS2="8.8.8.8"
    
  • 配置完成之后使用systemctl restart network刷新服务,并使用ping命令进行测试能否连接外网,能够连接则配置成功

  1. 关闭每台虚拟机防火墙和seLinux,防止干扰k8s运行,最好清除iptables规则

    # 关闭防火墙并且设置开机不启动
    systemctl stop firewalld
    systemctl disable firewalld
    # 关闭seLinux,getenforce是获取seLinux的状态
    # 没有设置过seLinux一般getenforce查询结果为Enforcing,需设置为disable关闭
    getenforce
    # 直接修改文件,改为SELINUX=disabled,重启之后生效
    vim /etc/selinux/config
    # 清除iptables规则
    iptables -F
    
  2. 关闭交换分区(k8s1.8版本以上要求必须关闭)以提升性能

    # 临时关闭
    swapoff -a
    # 修改/etc/fstab文件永久关闭,将文件中/dev/mapper/centos-swap swap行注释即可,也可以直接运行下面这条命令
    sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab
    
  3. 升级所有软件yum update -y(不必要,可跳过)

  4. 安装一些软件(非必要,可不做)

    yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxm12-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm npdate
    
  5. 互相配置ssh免密通道(这一步也没必要,配置步骤博主会写另一篇博客)

  6. 修改/etc/hosts文件

    # 直接运行下面的命令,记得将IP地址修改为自己机器的IP地址,主机名字也换成自己的
    cat >> /etc/hosts << EOF
    192.168.*.* k8smaster
    192.168.*.* k8snode1
    192.168.*.* k8snode2
    192.168.*.* k8snode3
    EOF
    
  7. 加载模块br_netfilter(和网络通信有关)

    # 临时加载
    modprobe br_netfilter
    # 永久加载,创建文件,在文件中写入模块名字br_netfilter
    vim /etc/modules-load.d/k8s.conf
    systemctl restart systemd-modules-load.service
    
    #代替命令,也需要运行systemctl这条命令
    cat >> /etc/modules-load.d/k8s.conf << EOF
    > br_netfilter
    > EOF
    
  8. 修改内核参数以满足k8s的运行需求,运行下面的命令

    cat <<EOF >> /etc/sysctl.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_nonlocal_bind = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=0
    EOF
    
    # 重新加载系统参数配置,让上面的修改生效
    sysctl -p
    

安装docker

由于在2022年k8s的1.24版本更新中已经完全放弃了docker作为容器运行时软件,想要继续使用docker作为容器运行时软件,只能安装1.23以下的版本,然后k8s1.23版本支持的最新docker是20.10。

安装docker命令:

#安装工具包
yum install -y yum-utils
# 使用工具包自动下载docker,这是官方的源
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
#可以使用阿里云镜像替换官方源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


# 指定版本安装docker
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io

# 开启docker服务
systemctl start docker
# 设置开机启动
systemctl enable docker


# 配置Docker使用systemd作为默认Cgroup驱动,配置之后需要重启docker
cat <<EOF > /etc/docker/daemon.json
{
	"registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
	"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#重启docker
systemctl restart docker

安装k8s

  1. 添加k8s yum源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
  2. 安装kubeadm,kubelet,kubectl(指定版本)

    yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
    
  3. 设置kubelet开机自启动

    systemctl enable kubelet
    
  4. 安装CoreDNS容器(k8s集群运行时需要CoreDNS提供DNS解析服务)

    # 拉取镜像
    docker pull coredns/coredns:1.8.4
    
    # 将镜像改名
    docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
    

master节点初始化

以下操作在master节点进行

  1. 使用kubeadm init命令进行初始化,运行下面的命令之后等待命令跑完

    # 记得改变IP,只要改第一行的IP地址,一般改为master节点地址
    kubeadm init \
    --apiserver-advertise-address=192.168.*.* \
    --image-repository registry.aliyuncs.com/google_containers \
    --service-cidr=10.1.0.0/16 \
    --pod-network-cidr=10.244.0.0/16
    #--pod-network-cidr=192.168.0.0/16
    
    • –pod-network-cidr有两个值,打算使用calico网络插件时,最好使用192.168.0.0/16,然后打算使用flannel网络插件时最好使用10.244.0.0/16
    • 出现下面的提示结果代表初始化成功了
      在这里插入图片描述
  2. 初始化成功之后,通过提示结果节点机器运行kubeadm join部分的命令加入节点
    在这里插入图片描述

    • 节点加入成功之后的结果
      在这里插入图片描述
  3. 初始化kubectl,以使用kubectl管理集群(提示结果里面有这一步,可以仔细看一下)

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  4. 完成以上步骤就基本完成了安装,执行kubectl get node命令查看节点状态
    请添加图片描述

    • 到这里发现所有节点为NotReady状态,这是因为完成互通还需要安装CNI(Container Networking Interface)网络插件

安装网络插件

CNI 全称是“Container Networking Interface”,即容器网络接口,它提供了一种标准的插件机制,用于连接容器到底层网络中。CNI 插件是一种可执行程序,它将实现容器网络连接的一些逻辑打包在一起,允许容器使用不同的网络模型,并提供了一组网络抽象接口。在 Kubernetes 等容器编排平台中,CNI 插件被广泛使用来实现容器网络。

CNI 插件可以由第三方厂商开发和维护,因此,可以选择最适合自己的插件。CNI 插件通常运行在主机上,并由容器运行时调用,例如 Docker、rkt 等。当容器需要连接到主机网络时,CNI 插件将会为其创建必要的网络接口和路由规则。

一些常用的 CNI 插件包括:

  • Flannel:一个简单易用的网络解决方案,支持多种部署模式。
  • Calico:一个高度可扩展的容器网络方案,旨在为大规模生产环境提供网络和安全性。
  • Weave Net:一个分布式的容器网络方案,具有良好的可扩展性和高度自动化的管理。
  • Cilium:一个基于 eBPF 的容器网络和安全解决方案,提供强大的流量控制和安全性。

安装命令(只要在master节点运行)

flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
calico
# 这两条命令不一样,别看错了
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml

# 查看部署进度
watch kubectl get pods -n calico-system

一般这里执行会卡住,这两条kubectl create -f命令要先去外网下载相关的yaml文件,需要挂代理(有时在虚拟机用wget命令也能下载下来),但是虚拟机不好代理,可以在实体机上将yaml文件(迅雷等软件可以下载)下载下来再使用xftp等软件传给虚拟机,然后执行下列命令
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml

安装完之后,再运行kubectl get node查看(一般要等一下,不会立马就改变状态)
在这里插入图片描述
到这里安装完成,每个步骤博主都亲测可用,如果有问题,欢迎大家在评论区讨论。

小试牛刀

走完上面的步骤就安装完成k8s了,可以玩一玩k8s的命令,下面是一个用命令建立pod的小例子

kubectl create deployment k8s-nginx --image=nginx -r 3

命令的含义就不解释了。。。。。

kubectl get pod -o wide可以查看结果:
请添加图片描述

  • 44
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
部署 k8s 中的 ingress-controller v1.1.0,可以按照以下步骤进行操作: 1. 首先,确保 Kubernetes 集群已经可用并且已经正确设置。 2. 下载 ingress-controller v1.1.0 的安装文件。可以通过访问官方仓库或者 GitHub 并找到相关的发布版本进行下载。 3. 解压并配置 ingress-controller。通常可以通过编辑 YAML 文件来配置 ingress-controller,在其中指定一些关键参数,如使用的 ingress 类型、负载均衡器类型等。 4. 部署 ingress-controller。通过使用 kubectl 命令行工具,执行 `kubectl apply -f <配置文件>` 来完成 ingress-controller 的部署。 5. 确认 ingress-controller 已经成功部署。可以使用 `kubectl get pods -n <命名空间>` 命令来确认 ingress-controller 的运行状态。 6. 配置 ingress 规则。根据实际需求,编辑定义 ingress 规则的 YAML 文件并部署到 Kubernetes 中。 7. 确认 ingress 规则已经生效。可以通过 `kubectl get ingress -n <命名空间>` 命令来查看已部署的 ingress 规则,并确认其状态为 "RUNNING"。 8. 测试 ingress-controller。通过访问 ingress 规则中指定的域名或路径来确认 ingress-controller 是否成功地将请求转发到相应的服务。 这些步骤可以帮助您在 Kubernetes 中部署 ingress-controller v1.1.0,并通过 ingress 规则进行请求转发。在部署过程中,记得根据实际需求进行必要的配置和调整,以确保 ingress-controller 能够正常工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值