当前位置: 首页 > news >正文

Kubernetes(K8s) —— 部署(保姆级教程)

Kubernetes 部署

  • 一、k8s中容器的管理方式
  • 二、k8s 集群部署
    • 1、k8s 环境部署说明
    • 2、集群环境初始化
    • 3、所有节点安装docker-ce
    • 4、配置harbor仓库
    • 5、安装K8S部署工具
    • 6、在所节点安装cri-docker
    • 7、在master节点拉取K8S所需镜像
    • 8、集群初始化
    • 9、安装flannel网络插件
    • 10、测试集群运行情况
    • 11、设置kubectl命令补齐功能

一、k8s中容器的管理方式

在这里插入图片描述

K8S 集群创建方式有3种:

  • centainerd:默认情况下,K8S在创建集群时使用的方式

  • docker:Docker使用的普记录最高,虽然K8S在1.24版本后已经费力了kubelet对docker的支持,但时可以借助 cri-docker方式来实现集群创建

  • cri-o: CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方 式来实现Kubernetes集群的创建。

注意:

docker 和cri-o 这两种方式要对kubelet程序的启动参数进行设置

二、k8s 集群部署

1、k8s 环境部署说明

K8S中文官网: https://kubernetes.io/zh-cn/

主机名ip角色
reg.hxd.org192.168.83.200harbor仓库
k8s-master192.168.83.100master,k8s集群控制节点
k8s-node1192.168.83.10worker,k8s集群工作节点
k8s-node2192.168.83.20worker,k8s集群工作节点

2、集群环境初始化

  • 设置静态ip,三种方式
1[root@ ~]# nmtui
编辑连接 -> ens160 -> 修改内容 -> 确定 -> 返回 -> 退出
[root@ ~]# nmcli c up ens160      # 连接网络
[root@ ~]# nmcli c reload        # 登录网络连接2[root@ ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens160
# Generated by dracut initrd
NAME="ens160"
DEVICE="ens160"
ONBOOT=yes
NETBOOT=yes
UUID="42fc4d6c-82c6-4cea-b683-1ad03460b5fe"
IPV6INIT=yes
BOOTPROTO=none
IPADDR="192.168.83."    # ip
NETMASK="255.255.255.0"
GATEWAY="192.168.83.2"
DNS1="114.114.114.114"
TYPE=Ethernet[root@ ~]# nmcli c up ens160      
[root@ ~]# nmcli c reload       3[root@ ~]# nmcli c mod ens160 ipv4.method manual ipv4.address   192.168.83. ipv4.gateway 192.168.83.2 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect yes[root@ ~]# nmcli c up ens160      
[root@ ~]# nmcli c reload    
  • 关掉防火墙和SELINUX
[root@ ~]# systemctl enable --now firewalld
[root@ ~]# vim /etc/selinux/config
SELINUX=disabled
或者
[root@ ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  • master和node禁用swap和配置本地解析
[root@k8s- ~]# systemctl mask swap.target
[root@k8s- ~]# swapoff -a[root@k8s- ~]# vim /etc/fstab
# 注释swap
#/dev/mapper/rhel-swap  swap    swap    defaults  0 0[root@k8s- ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.83.100 k8s-master
192.168.83.10  k8s-node1
192.168.83.20  k8s-node2
192.168.83.200 reg.hxd.org
  • master和node节点时间同步
[root@k8s- ~]# vim /etc/chrony.conf
pool ntp1.aliyun.com iburst  # 修改为阿里云的时间同步地址
[root@k8s- ~]# systemctl restart chronyd[root@k8s- ~]# chronyc sources -v
# 最下面如果是^*,说明时间同步成功
^* 118.31.40.99                  2   6     7     1   -138ms[ -143ms] +/-  173ms

3、所有节点安装docker-ce

  • 配置docker仓库
[root@ ~]# vim /etc/yum.repos.d/docker.repo
[docker]
name = docker
baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.5/x86_64/stable/
gpgcheck = 0[root@ ~]# dnf install docker-ce -y
  • 所有节点设定docker的资源管理模式为systemd
[root@ ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://reg.hxd.org"]}
[root@ ~]# systemctl enable --now docker

4、配置harbor仓库

  • 生成认证key和证书
# 创建目录
[root@reg ~]# mkdir /data/certs/ -p
# 生成认证key和证书
[root@reg ~]# openssl req -newkey  rsa:4096 \
-nodes -sha256 -keyout /data/certs/hxd.org.key \
-addext "subjectAltName = DNS:reg.hxd.org" \
-x509 -days 365 -out /data/certs/hxd.org.crt
# 注意创建时,必须写对域名
Common Name (eg, your name or your server's hostname) []:reg.hxd.org# 查看证书信息
[root@reg ~]# openssl x509 -in /data/certs/hxd.org.crt -noout -text
  • 启用docker,并设置开机启动
[root@reg ~]# systemctl enable --now docker
  • 将harbor的证书颁发给其他三个主机
[root@k8s- ~]# mkdir /etc/docker/certs.d/reg.hxd.org/ -p[root@reg ~]# for i in 100 10 20 ; do scp /data/certs/hxd.org.crt root@192.168.83.$i:/etc/docker/certs.d/reg.hxd.org/ca.crt; done
  • 启用harbor仓库

下载软件包地址

https://github.com/goharbor/harbor/releases

# 上传到harbor仓库主机并解压
[root@reg ~]# tar zxf harbor-offline-installer-v2.5.4.tgz -C /opt/# 复制配置文件格式为.yml结尾来启用文件
[root@reg ~]# cd /opt/
[root@reg opt]# ls
containerd  harbor
[root@reg opt]# cd harbor/
[root@reg harbor]# ls
common  common.sh  docker-compose.yml  harbor.v2.5.4.tar.gz    harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@reg harbor]# cp harbor.yml.tmpl harbor.yml# 修改配置文件以下内容
[root@reg harbor]# vim harbor.yml
hostname: reg.hxd.orgcertificate: /data/certs/hxd.org.crtprivate_key: /data/certs/hxd.org.keyharbor_admin_password: 123# 安装并启用harbor
[root@reg harbor]# ./install.sh --help 
Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.
Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https. 
Please set --with-trivy if needs enable Trivy in Harbor
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor
[root@reg harbor]# ./install.sh  --with-chartmuseum# 在master主机上登陆harbor仓库
[root@k8s-master ~]# docker login reg.hxd.org
Login Succeeded
[root@k8s-master ~]# docker info
Cgroup Driver: systemd        # 资源管理更改为systemd
https://reg.hxd.org/          # 认证harbor仓库
  • 在浏览器上搜索192.168.83.200

在这里插入图片描述

在这里插入图片描述

5、安装K8S部署工具

  • 所有节点部署K8S软件仓库
[root@k8s- ~]# vim /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0
  • 安装软件
# 显示所有版本
[root@k8s-master ~]# dnf list kub* --showduplicates# master上安装
[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y# node1,node2上安装
[root@k8s-node ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0  -y

6、在所节点安装cri-docker

  • 安装cri-docker

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker 软件下载: https://github.com/Mirantis/cri-dockerd

# dnf install libcgroup-0.41-19.el8.x86_64.rpm \> cri-dockerd-0.3.14-3.el8.x86_64.rpm -y
# 上传k8s-1.30.tar.gz
# 上传libcgroup-0.41-19.el8.x86_64.rpm  cri-dockerd-0.3.14-3.el8.x86_64.rpm安装包,并解压
[root@k8s-master ~]# dnf install *.rpm -y# 传给node节点
[root@k8s-master ~]# scp libcgroup-0.41-19.el8.x86_64.rpm  cri-dockerd-0.3.14-3.el8.x86_64.rpm  root@192.168.83.10:/root/
[root@k8s-master ~]# scp libcgroup-0.41-19.el8.x86_64.rpm  cri-dockerd-0.3.14-3.el8.x86_64.rpm  root@192.168.83.20:/root/
  • 修改cri-docker配置文件
[root@k8s- ~]# vim /lib/systemd/system/cri-docker.service
# 指定网络插件名称及基础容器镜像
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.hxd.org/k8s/pause:3.9
  • 启用cri-docker
[root@k8s-systemc ~]# systemctl daemon-reload
[root@k8s- ~]# systemctl enable --now cri-docker.service# dockerd的套接字文件
[root@k8s-master ~]# ll /var/run/cri-dockerd.sock # 默认文件信息
# [root@k8s-master ~]# kubeadm config print  init-defaults | less

7、在master节点拉取K8S所需镜像

  • 拉取k8s集群所需要的镜像
[root@k8s-master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock[root@k8s-master ~]# docker images | awk '/google/{print $1":"$2}'[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F / '{print $3}'[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F / '{system("docker tag "$0" reg.hxd.org/k8s/"$3)}'# 在浏览器harbor建立k8s项目选择公开[root@k8s-master ~]# docker images  | awk '/hxd/{system("docker push "$1":"$2)}'# 注意拉取到仓库前必须登录仓库
[root@k8s-master ~]# docker login reg.hxd.org
用户:admin
密码:123

在这里插入图片描述

8、集群初始化

  • 启动kubelet服务
# 所有主机
[root@k8s- ~]# systemctl enable --now kubelet.service
[root@k8s- ~]# systemctl restart kubelet.service
  • 执行初始化
[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository reg.hxd.org/k8s \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock# 指定集群配置文件变量(不指定执行kubectl get node会报错)
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  • 给node主机指定这个master令牌
kubeadm join 192.168.83.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery
token-ca-cert-hash 
sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock# 当前节点没有就绪,因为还没有安装网络插件,容器没有运行
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   4m35s   v1.30.0

注意:

在此阶段如果生成的集群token找不到了可以重新生成

[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.83.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery
token-ca-cert-hash 
sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23
# 删除令牌
[root@k8s-master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

9、安装flannel网络插件

官方网站: https://github.com/flannel-io/flannel

  • 安装网咯插件
# 上传下载好的 flannel-0.25.5.tag.gz 和 kube-flannel.yml
[root@k8s-master ~]# mkdir network
[root@k8s-master ~]# mv flannel-0.25.5.tag.gz kube-flannel.yml network/
[root@k8s-master ~]# cd network/
[root@k8s-master network]# docker load -i flannel-0.25.5.tag.gz
Loaded image: flannel/flannel-cni-plugin:v1.5.1-flannel1# 在浏览器harbor建立flannel项目选择公开# 给镜像打标签
[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1    reg.hxd.org/flannel/flannel-cni-plugin:v1.5.1-flannel1# 拉取镜像
[root@k8s-master ~]# docker push reg.hxd.org/flannel/flannel-cni-plugin:v1.5.1-flannel1# 给镜像打标签
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.hxd.org/flannel/flannel:v0.25.5# 拉取镜像
[root@k8s-master ~]# docker push reg.hxd.org/flannel/flannel:v0.25.5
  • 编辑kube-flannel.yml 修改镜像下载位置
[root@k8s-master ~]# vim kube-flannel.yml
image: flannel/flannel:v0.25.5
image: flannel/flannel-cni-plugin:v1.5.1-flannel1
image: flannel/flannel:v0.25.5
  • 安装flannel网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml
# 查看集群节点
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   4h13m   v1.30.0
k8s-node1    Ready    <none>          4h11m   v1.30.0
k8s-node2    Ready    <none>          4h11m   v1.30.0

注意:

所有阶段的STATUS为Ready状态,那么恭喜你,你的kubernetes就装好了!!

10、测试集群运行情况

  • 建立一个pod
# 上传nginx-latest.tar.gz镜像
# 打标签
[root@k8s-master ~]# docker tag nginx:latest reg.hxd.org/library/nginx:latest# 拉取到仓库
[root@k8s-master ~]# docker push reg.hxd.org/library/nginx:latest# 建立pod
[root@k8s-master ~]# kubectl run test --image nginx:latest# 查看pod状态
[root@k8s-master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
test   1/1     Running   0          4m48s
[root@k8s-master ~]# kubectl get pods -o wide 
NAME   READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
test   1/1     Running   0          6m38s   10.244.2.2   k8s-node2   <none>           <none># 查看建立的pos信息
[root@k8s-master ~]# kubectl describe pods test
Container ID:   docker://5c3ac30e03bd991bc9a20aa1ab49a098893b6fbbf03565cedd8e406c33590d0a   容器id
Normal  Scheduled  9m53s  default-scheduler  Successfully assigned default/test to k8s-node2# 删除pod
[root@k8s-master ~]# kubectl delete pod  test

注意:

node主机删除了建立的pos镜像,也会自动生成

11、设置kubectl命令补齐功能

[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source  ~/.bashrc
http://www.dtcms.com/a/503272.html

相关文章:

  • 用 Python 写一个自动化办公小助手
  • 《二叉树“防塌”指南:AVL 树如何用旋转 “稳住” 平衡?》
  • 网站制作wap页面wordpress微信公众平台开发
  • 分解如何利用c++修复小程序的BUG
  • 若依微服务 nacos的配置文件
  • 63.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--预算告警
  • 网站建设没有业务怎么办德州网架公司
  • 九成自动化备份知乎专栏
  • 圆形平面阵列与平面方形阵的导向矢量:原理与实现
  • Altium Designer(AD24)Help帮助功能总结
  • 网站建设 个人2012版本wordpress
  • 6.2 域名系统 (答案见原书 P271)
  • php怎么网站开发上海网站建设86215
  • C程序中的指针:动态内存、链表与函数指针
  • 免费注册网站软件2022推广app赚佣金平台
  • 【Linux运维实战】彻底修复 CVE-2011-5094 漏洞
  • Java | 基于redis实现分布式批量设置各个数据中心的服务器配置方案设计和代码实践
  • STM32中硬件I2C的时钟占空比
  • iFlutter --> Flutter 开发者 的 IntelliJ IDEA / Android Studio 插件
  • Easyx图形库应用(和lua结合使用)
  • 网站建设计划表模板网络运营需要学什么专业
  • Scrapy 框架入门:高效搭建爬虫项目
  • 【JVM】详解 垃圾回收
  • 【前端魔法】实现网站一键切换主题
  • 电子 东莞网站建设wordpress 图片服务器配置
  • Spring Boot 3零基础教程,WEB 开发 通过配置类代码方式修改静态资源配置 笔记31
  • Vue模块与组件、模块化与组件化
  • SiriKali,一款跨平台的加密文件管理器
  • 构建优雅的 Spring Boot Starter:深入掌握国际化与配置覆盖的最佳实践
  • 网站建设的意义单页式网站