栏目分类

你的位置:哈尔滨管理系统开发 > 管理系统开发 > 哈尔滨管理系统开发 生手必看!Ubuntu 22.04 搭配 kubeadm 打造 Kubernetes v1.28.2 环境

哈尔滨管理系统开发 生手必看!Ubuntu 22.04 搭配 kubeadm 打造 Kubernetes v1.28.2 环境

发布日期:2024-09-28 15:31    点击次数:50

在现在快速变化的科技景不雅中,学习Kubernetes(K8s)仍是变得至关报复。行为容器编排平台的领军者哈尔滨管理系统开发,K8s为当代欺诈开荒和部署带来了变革性的鼎新。它不仅简化了复杂的欺诈按次管束,还提供了浩大的自动化和伸缩性能。

本年玄色星期五购入了一个张CKA的历练券,筹画准备在本年的把这个CKA拿下,于是,在我方的腹地上搭建学习环境,为了愈加面对历练的环境,专门接纳Ubuntu系统重新部署了一个Kubernetes。

图片哈尔滨管理系统开发

环境准备机器规划

三台机器齐是接纳Ubuntu最新22.04的版块,内核版块是5.15.0-91-generic,三台机器用体的散播如下:

变装主机称呼IPkueernetes版块masterk8s-master192.168.1.17v1.28.2node1k8s-node1192.168.1.18v1.28.2node2k8s-node2192.168.1.19v1.28.2❝

Docker Engine 莫得终了 CRI, 而这是容器运行时在 Kubernetes 中职责所需要的。为此,必须装配一个稀零的工作 cri-dockerd。cri-dockerd 是一个基于传统的内置 Docker 引擎支撑的样貌, 它在 1.24 版块从 kubelet 中移除。

❞环境建立确保每个节点上的MAC地址和product_uuid的独一性。你不错使用敕令ip link 或 ifconfig -a 来获得集聚接口的 MAC 地址不错使用 sudo cat /sys/class/dmi/id/product_uuid 敕令对product_uuid校验
root@k8s-master:~# ansible k8s -m shell -a 'cat /sys/class/dmi/id/product_uuid'192.168.1.19 | CHANGED | rc=0 >>438473e8-8505-496b-940f-d82d00ce0622192.168.1.18 | CHANGED | rc=0 >>9ccfa185-bd89-40b8-9c6a-b62fb469bd46192.168.1.17 | CHANGED | rc=0 >>16142df0-765e-4b36-9c4e-81c299332d42root@k8s-master:~#

一般来讲,硬件修复会领有独一的地址,关联词有些编造机的地址可能会重叠。Kubernetes 使用这些值来独一确信集群中的节点。若是这些值在每个节点上不独一,可能会导致装配失败。

❞设立主机名

把柄机器的规划,散播设立三台主机名为k8s-master、k8s-node1和k8s-node2,谋划是为了便捷识别。

#修改建立文献样貌root@k8s-master:~# cat /etc/hostnamek8s-masterroot@k8s-node1:~# cat /etc/hostnamek8s-node1root@k8s-node2:~# cat /etc/hostnamek8s-node2#敕令行样貌,临时修改# 设立 master 主机名hostnamectl set-hostname k8s-master && bash# 设立 worker 主机名hostnamectl set-hostname k8s-node1 && bashhostnamectl set-hostname k8s-node2 && bash
修改国内镜像源地址

先把Ubuntu系统的软件源修改成国内的镜像源,我这里以修改为华为的镜像源为例。

备份建立文献
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
修改sources.list文献,将http://archive.ubuntu.com和http://security.ubuntu.com替换成http://repo.huaweicloud.com,不错参考如下敕令:
sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listsudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
建立时辰同步

装配完Ubuntu系统时,系统的时区是有问题的,咱们需要对系统的时区进行修改。不错常用timedatectl进行临时修改,关联词,系统重启后会失效。修改建立文献。要害建立如下:

timedatectl set-time Asia/Shanghai #临时转变,重启失效cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime #修改建立文献,重启不失效

接纳ntpdate敕令进行时辰校对,最小化装配,系统莫得装配这个敕令,需要自行装配,实际如下敕令

sudo apt install ntpdate

装配好ntpdate软件后,实际如下敕令进行时辰校对:

第21分钟,亚马尔禁区前沿轰出世界波破门。

21:18 奖号全部产生,本期奖号:红球05 09 14 21 22 26,蓝球12。

ntpdate time1.aliyun.com

何况,通过谋划任何终了时辰同步。如下敕令是每个一个小时向阿里云时辰工作器进行校对时辰。

0 */1 * * * ntpdate time1.aliyun.com
建立内核转发及网桥过滤添加建立文献
cat << EOF | tee /etc/modules-load.d/k8s.confoverlaybr_netfilterEOF
加载模块
modprobe overlaymodprobe br_netfilter
添加网桥过滤及内核转发建立文献
cat  <<EOF | tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables  = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward                 = 1EOF
装配Ipset及ipvsadm
sudo apt -y install ipset ipvsadm
建立ipvsadm模块,添加需要添加的模块
cat  << EOF | tee /etc/modules-load.d/ipvs.confip_vsip_vs_rrip_vs_wrrip_vs_shnf_conntrackEOF
编写剧本,加载模块
cat << EOF | tee ipvs.shmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrackEOF./ipvs.sh
关闭swap分区
swapoff -a  #临时关闭
容器运行时准备获得二进制装配文献

本案例中接纳二进制样貌装配Containerd。通过github获得Containerd的二进制版块。如下图:

图片

Containerd样貌地址

Containerd样貌地址

装配建立Containerd

通过底下的敕令进行解压

 tar -xf cri-containerd-1.7.12-linux-amd64.tar.gz  -C /

-C:是指定解压的目次,通过-C /参数,会把 Containerd的文献解压到对于的文献夹中。

通过以敕令生成Containerd的建立文献,生成建立文献之前需要新建目次。要害敕令如下:

mkdir /etc/containerdcontainerd config default > /etc/containerd/config.toml

修改 /etc/containerd/config.toml

第65行sanbox_image的本体,从正本的registry.k8s.io/pause:3.8修改成registry.aliyuncs.com/google_containers/pause:3.9第137行 SystemdCgroup的本体,从正本的false改成true。Containerd建立镜像加快

修改Config.toml文献。如下:

[plugins."io.containerd.grpc.v1.cri".registry]      config_path = "/etc/containerd/certs.d"  # 镜像地址建立文献       [plugins."io.containerd.grpc.v1.cri".registry.auths]       [plugins."io.containerd.grpc.v1.cri".registry.configs]       [plugins."io.containerd.grpc.v1.cri".registry.headers]       [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 
创建相应的目次
mkdir /etc/containerd/certs.d/docker.io -pv
建立加快
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOFserver = "https://docker.io"[host."https://x46sxvnb.mirror.aliyuncs.com"]  capabilities = ["pull", "resolve"]EOF
启动并设立开机启动
systemctl enable --now containerd#考据版块信息containerd --veriosn
K8S集群部署K8S集群软件apt源准备

使用阿里云镜像源,实际如下敕令:

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

添加完源件源后,实际底下敕令进行更新源:

 apt-get update

实际完后可能会报如下失实,原因是因为公钥的问题。

图片

报错

科罚形状请参考这篇著作

《Kubernetes 排错指南-012》

K8S集群软件的装配

通过以下敕令巡视不错装配的软件列表,查询到最新版块是1.28.2的版块。

apt-cache madison kubeadm

图片

装配指定的版块,本案例以装配最新版块是1.28.2为例。实际如下敕令进行装配:

apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00

节点上不错毋庸装配kubectl

图片

启动kueblet,并设立开机自启动。
systemctl enable --now kubelet

慎重k8s软件自动升级,通过以下敕令进行锁定定版块

apt-mark hold kubelet kubeadm kubectl
K8S集群开动化

通过如下敕令生成一个默许的建立文献:

  kubeadm config print init-defaults > /home/k8s/init/kubeadm-init.yaml

实际完上述的敕令会在对应的目次下生成一个kubeadm-init.yaml文献,需要对这个文献的一些参数进行修改。

apiVersion: kubeadm.k8s.io/v1beta3bootstrapTokens:- groups:  - system:bootstrappers:kubeadm:default-node-token  token: abcdef.0123456789abcdef  ttl: 24h0m0s  usages:  - signing  - authenticationkind: InitConfigurationlocalAPIEndpoint:  advertiseAddress: 192.168.1.17  #修改了master IP地址  bindPort: 6443nodeRegistration:  criSocket: unix:///var/run/containerd/containerd.sock  imagePullPolicy: IfNotPresent  name: k8s-master  #修改了master节点主机称呼  taints: null---apiServer:  timeoutForControlPlane: 4m0sapiVersion: kubeadm.k8s.io/v1beta3certificatesDir: /etc/kubernetes/pkiclusterName: kubernetescontrollerManager: {}dns: {}etcd:  local:    dataDir: /var/lib/etcdimageRepository: registry.aliyuncs.com/google_containers  #修改了镜像源kind: ClusterConfigurationkubernetesVersion: 1.28.2  #修改了版块信息networking:  dnsDomain: cluster.local  podSubnet: 10.244.0.0/16 #添加了Pod网段信息  serviceSubnet: 10.96.0.0/12scheduler: {}

不错通过以下敕令列举出需要拉取的镜像。

kubeadm config images list --config  /home/k8s/init/kubeadm-init.yaml

图片

不错提前把需求的镜像拉取下来,通过底下敕令进行拉取:
kubeadm config images list --config  /home/k8s/init/kubeadm-init.yaml

图片

拉取告成之后,通过底下的敕令进行k8s集群的开动化。
kubeadm init --config=/home/k8s/init/kubeadm-init.yaml   --v=6

出现以下信息,代表K8S开动告成了。

图片

按照上述的指示,管理系统开发资讯进行如下的操作:
  mkdir -p $HOME/.kube  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/config

实际上述的敕令,就不错通过kubectl进行巡视k8s集群的景色信息。如下图:

图片

节点加入到集群中

在节点上通过如下敕令,获得加入集群的token值。

kubeadm token create --print-join-command

实际告成后,会出现如下信息,复制如下信息在需求加入集群的node节点上实际。

图片

若是实际完敕令后,出现如下信息,示意仍是加入告成。

图片

也不错通过在master节点上实际如下敕令巡视是否加入告成。
root@k8s-master:~# kubectl get nodeNAME         STATUS     ROLES           AGE     VERSIONk8s-master   NotReady   control-plane   50m     v1.28.2k8s-node1    NotReady   <none>          2m16s   v1.28.2k8s-node2    NotReady   <none>          2m16s   v1.28.2

由于还没装配集聚插件的原因,是以,节点表露NotReady景色。

❞K8S集群集聚插件Calico部署

在装配到calico集聚组件的技能或多或少齐会因为国表里集聚的问题一直卡在pull镜像的阶段无法完成装配,本案例通过离线样貌装配Calico集聚插件。

在线装配

若是能科学上网的不错探究在线装配,详确装配关节不错查阅官方文档,找到Quickstart for Calico on Kubernetes中的Install Calico,如下图

图片

离线装配下载calico离线包

最初去github全局搜索calico,点击参加样貌,在Releases下下载我方需要的calico版块的离线包(本案例3.27版块为例)。样貌前载地址如下:

https://github.com/projectcalico/calico
解压calico离线包并将所需文献上传至工作器

把下载的文献上传工作器并进行解压,如下:

root@k8s-master:~# tar -zxf release-v3.27.0.tgz root@k8s-master:~/release-v3.27.0# lsbin  images  manifests

然后,参加到manifests文献夹,巡视calico.yml文献,巡视需要的镜像本体,如下:

root@k8s-master:~/release-v3.27.0/manifests# cat calico.yaml |grep image:          image: docker.io/calico/cni:v3.27.0          image: docker.io/calico/cni:v3.27.0          image: docker.io/calico/node:v3.27.0          image: docker.io/calico/node:v3.27.0          image: docker.io/calico/kube-controllers:v3.27.0

这里表露装配calico需要三个镜像,去解压的离线包imgaes文献夹中找到对应的三个离线镜像包文献,这里对应的区分是calico-cni.tar,calico-kube-controllers.tar和calico-node.tar三个离线包,将这三个离线镜像上传至工作器。

离线镜像导入containerd的k8s定名空间中

不错使用ctr namespace ls敕令巡视containerd的定名空间。k8s的定名空间为k8s.io

root@k8s-master:~/release-v3.27.0/manifests# ctr  namespace lsNAME   LABELSk8s.io

使用containerd的导入镜像敕令将calico的离线镜像包导入到k8s的定名空间中

软件开发
root@k8s-master:~/release-v3.27.0/images# lscalico-cni.tar  calico-dikastes.tar  calico-flannel-migration-controller.tar  calico-kube-controllers.tar  calico-node.tar  calico-pod2daemon.tar  calico-typha.tarroot@k8s-master:~/release-v3.27.0/images#root@k8s-master:~/release-v3.27.0/images#ctr -n k8s.io images import calico-cni.tarroot@k8s-master:~/release-v3.27.0/images#ctr -n k8s.io images import calico-kube-controllers.tarroot@k8s-master:~/release-v3.27.0/images#ctr -n k8s.io images import calico-node.tar
装配calico

参加到manifests/文献夹中,实际如下敕令,装配calico

kubectl create -f calico.yml

实际完上述的敕令后,即可完成calico的部署。如下:

root@k8s-master:~# kubectl get pod -ANAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGEkube-system   calico-kube-controllers-5fc7d6cf67-9vnct   1/1     Running   0          81mkube-system   calico-node-hzfvr                          1/1     Running   0          81mkube-system   calico-node-jbdkk                          1/1     Running   0          81mkube-system   coredns-66f779496c-gqgb9                   1/1     Running   0          24hkube-system   coredns-66f779496c-p2f5g                   1/1     Running   0          24hkube-system   etcd-k8s-master                            1/1     Running   0          24hkube-system   kube-apiserver-k8s-master                  1/1     Running   0          24hkube-system   kube-controller-manager-k8s-master         1/1     Running   0          24hkube-system   kube-proxy-44n5b                           1/1     Running   0          24hkube-system   kube-proxy-vf5b4                           1/1     Running   0          23hkube-system   kube-scheduler-k8s-master                  1/1     Running   0          24h
部署欺诈级窥探

通过上述的关节仍是完成了K8S集群的部署,底下以部署一个Nginx欺诈为例,通俗素质一个K8S部署欺诈形状。K8s部署样貌分为两种一个不错顺利敕令行的样貌,另外一个是写资源清单的样貌。底下是一个部署Nginx的资源清单案例:

apiVersion: apps/v1	#与k8s集群版块关系,使用 kubectl api-versions 即可巡视刻下集群支撑的版块kind: Deployment	#该建立的类型,咱们使用的是 Deploymentmetadata:	        #译名为元数据,即 Deployment 的一些基本属性和信息  name: nginx-deployment	#Deployment 的称呼  labels:	    #标签,不错天真定位一个或多个资源,其中key和value均可自界说,不错界说多组,目前不需要联结    app: nginx	#为该Deployment设立key为app,value为nginx的标签spec:	        #这是对于该Deployment的描画,不错联结为你期待该Deployment在k8s中奈何使用  replicas: 1	#使用该Deployment创建一个欺诈按次实例  selector:	    #标签遴荐器,与上头的标签共同作用,目前不需要联结    matchLabels: #遴荐包含标签app:nginx的资源      app: nginx  template:	    #这是遴荐或创建的Pod的模板    metadata:	#Pod的元数据      labels:	#Pod的标签,上头的selector即遴荐包含标签app:nginx的Pod        app: nginx    spec:	    #守望Pod终了的功能(即在pod中部署)      containers:	#生成container,与docker中的container是团结种      - name: nginx	#container的称呼        image: nginx:1.7.9	#使用镜像nginx:1.7.9创建container,该container默许80端口可窥探---apiVersion: v1kind: Servicemetadata:  name: nginx-service #Service 的称呼  labels:       #Service 我方的标签    app: nginx  #为该 Service 设立 key 为 app,value 为 nginx 的标签spec:     #这是对于该 Service 的界说,描画了 Service 奈何遴荐 Pod,奈何被窥探  selector:     #标签遴荐器    app: nginx  #遴荐包含标签 app:nginx 的 Pod  ports:  - name: nginx-port  #端口的名字    protocol: TCP     #条约类型 TCP/UDP    port: 80          #集群内的其他容器组可通过 80 端口窥探 Service    nodePort: 32600   #通过轻易节点的 32600 端口窥探 Service    targetPort: 80  #将肯求转发到匹配 Pod 的 80 端口  type: NodePort  #Serive的类型,ClusterIP/NodePort/LoaderBalancer

上述的资源清单创建了两种类型一个Deployment,一个Service。通过底下的敕令实际部署。

kubectl apply -f nginx.yaml

实际告成后,如下图:

图片

然后,通过curl敕令进行窥探,大概轻易node节点IP+32600的样貌进行窥探。 本站仅提供存储工作,整个本体均由用户发布,如发现存害或侵权本体,请点击举报。

上一篇:哈尔滨管理系统开发 国足连败日本26年,范志毅怒不可遏:真思跳黄浦江安宁下!
下一篇:没有了