k8s的简介和部署

一、k8s简介

在部署应用程序的方式上面,主要经历了三个阶段:

传统部署:互联网早期,会直接将应用程序部署在物理机上
优点:简单,不需要其它技术的参与
缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

优点:程序环境不会相互产生影响,提供了一定程度的安全性

缺点:增加了操作系统,浪费了部分资源
容器化部署:与虚拟化类似,但是共享了操作系统
容器化部署方式给带来很多的便利,但是也会出现一些问题:
一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器当并发访问量变大的时候,怎么样做到横向扩展容器数量

kubenetes简介:

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。

二、k8s部署

主机名ip角色
docker-harbor.revkarl.org172.25.254.250harbor仓库
k8s-master172.25.254.100master,k8s集群控制节点
k8s-node1172.25.254.10worker,k8s集群工作节点
k8s-node2172.25.254.20worker,k8s集群工作节点

所有节点关闭selinux和防火墙

systemctl disabled firewalld
systemctl stop firewalld
grubby --update-kernel ALL --args selinux=0
reboot

所有节点在每次开启的时候禁用swapon分区:

vim /etc/rc.d/rc.local
swapoff /dev/dm-1
chmod +x /etc/rc.d/rc.local

所有节点做好dns解析:

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.10	  k8s-node1
172.25.254.20	  k8s-node2
172.25.254.100	k8s-master
172.25.254.250	reg.revkarl.org

所有节点安装docker:

cat /etc/yum.repos.d/docker-ce.repo 
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0
dnf install docker-ce -y

在所有的k8s节点创建放置证书的目录:

mkdir -p /etc/docker/certs.d/reg.revkarl.org/

把harbor仓库里的证书拷贝给k8s所有节点:

ls /data/certs/
revkarl.org.crt  revkarl.org.key
scp /data/certs/revkarl.org.crt root@172.25.254.100:/etc/docker/certs.d/reg,revkarl.org/ca.crt

启动docker仓库:

systemctl enable --now docker

登陆之后查看harbor仓库的认证:

docker login reg.revkarl.org
docker info

现在我们就可以安装k8s部署工具了

[root@k8s-master ~]# cat /etc/yum.repos.d/k8s.repo 
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
gpgcheck=0
dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

设置kubectl命令补齐功能:

dnf install bash-completion -y
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

在所有节点安装cri-docker

dnf install libcgroup-0.41-19.el8.x86_64.rpm \
> cri-dockerd-0.3.14-3.el8.x86_64.rpm -y

指定网络插件名称以及基础容器镜像 

vim /lib/systemd/system/cri-docker.service

fd:// --network-plugin=cni --pod-infra-container-image=reg.revkarl.org/k8s/pause:3.9
systemctl daemon-reload 
systemctl start cri-docker
ll /var/run/cri-dockerd.sock 
srw-rw---- 1 root docker 0 10月  5 18:03 /var/run/cri-dockerd.sock

在master节点拉取k8s所需镜像:

kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_contaniers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

上传镜像到harbor仓库

docker images | awk '/google/{ print $1":"$2}' \
| awk -F "/" '{system("docker tag "$0" reg.revkarl.org/k8s/"$3)}'
docker images | awk '/k8s/{system("docker push "$1":"$2)}'

三、集群初始化 

启动kubelet服务

systemctl enable --now kubelet
systemctl status kubelet.service

执行初始化命令:

kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository reg.revkarl.org/k8s \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

 指定集群配置文件变量:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

安装flannel网络插件:

下载flanne]的yaml部署文件

wget https://github.com/flanne7.io/flannel/releases/latest/download/kube-flannel.yml

拉取镜像: 

docker pull docker.io/flannel/flannel:v0.25.5
docekr docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1

上传镜像到仓库 :

docker tag flannel/flannel:v0.25.5reg.timinglee.org/flannel/flannel:v0.25.5
docker push reg.timinglee.org/flannel/flannel:v0.25.5
docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flanne11

修改镜像下载位置:

vim kube-flannel.yml
146:    image:reg.timinglee.org/flannel/flannel:v0.25.5
173:    image:reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
184:    image:reg.timinglee.org/flannel/flannel:v0.25.5

应用网络插件:

kubectl apply -f kube-flannel.yml

加入集群:

kubeadm join 172.25.254.100:6443 --token5hwptm.zwn7epa6pvatbpwf--discovery-token-ca-cert-hashsha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock

在master节点中查看所有node的状态:

kubectl get nodes

所有节点的状态都为ready,那么恭喜你装成功了!! 

 可以像我这样跑个nginx镜像试试:

### 回答1: Kubernetes(简称为K8s)是一个开源的容器编排和管理工具,而Docker是一种流行的容器化技术。在将应用程序部署到生产环境时,通常会使用Kubernetes和Docker来实现应用程序的容器部署。 Docker是一种轻量级的虚拟化技术,它可以将应用程序及其依赖项打包到一个独立的容器中。每个容器都运行在相互隔离的环境中,使得应用程序在不同的环境中具备相同的行为。使用Docker可以简化应用程序的部署和维护过程,提高应用程序的可移植性和可扩展性。 而Kubernetes则是用来管理和编排Docker容器的工具。它提供了一种强大的方式来自动化容器部署、扩展和管理。使用Kubernetes,我们可以定义容器的运行状态、资源需求和依赖关系,由Kubernetes来负责分配和管理这些容器部署Kubernetes提供了许多有用的功能,如自动扩展、负载均衡和容器调度等,可以确保应用程序始终以高可用性和高性能的方式运行。 在使用Kubernetes部署应用程序时,我们首先需要将应用程序打包成一个Docker容器镜像。然后,将这个镜像上传到一个容器镜像仓库中,可以是Docker Hub或者私有的镜像仓库。接下来,使用Kubernetes的命令或配置文件,定义容器部署和管理规则,如需要的资源、运行方式和依赖关系等。最后,Kubernetes将根据这些规则自动部署和管理容器,确保应用程序按照我们期望的方式运行。 总结来说,Kubernetes和Docker是两个在容器部署方面非常重要的工具。Docker提供了容器化技术,而Kubernetes则提供了一种强大的方式来自动化和管理这些容器部署。通过使用Kubernetes和Docker,我们可以实现应用程序的高效、可移植和可扩展的部署。 ### 回答2: K8sKubernetes)和Docker都是用于应用程序部署容器编排的工具,它们可以一起使用来实现高效的应用部署和管理。 Docker是一种开源的容器化平台,它将应用程序及其依赖关系打包到一个独立的容器中,使其可以在不同的操作系统和环境中运行。使用Docker部署应用程序时,可以将应用程序及其所有依赖项打包成一个镜像,在不同的环境中轻松部署和迁移。这样做可以显著提高应用程序的可移植性和可伸缩性。 然而,当应用程序数量和规模增加时,仅仅使用Docker来管理容器变得困难。这时候可以引入K8s来进行容器编排。K8s是一个用于自动化容器操作的开源平台,它可以自动化部署、扩展和管理应用程序的容器K8s可以监视和管理多个Docker容器,确保它们始终按照所定义的规范和要求运行。 通过使用K8s,可以实现应用程序的高可用性、负载均衡和动态扩展。K8s允许自动调度容器,以满足应用程序的需求,并支持水平扩展和自动伸缩。此外,K8s还提供了强大的存储和网络管理功能,可以方便地进行持久化存储和跨容器通信。 总而言之,Docker和K8s都是部署和管理容器化应用程序的重要工具。Docker提供了容器化平台,可以打包和运行应用程序,而K8s则提供了容器编排和管理功能,能够自动化和优化容器的运行。通过结合使用这两个工具,可以实现灵活、高效和可靠的应用程序部署和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值