发布日期:2024-11-06 04:03 点击次数:177
在目下快速变化的科技景不雅中,学习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软件后,奉行如下呐喊进行技能校对:
ntpdate time1.aliyun.com
而况,通过操办任何齐备技能同步。如下呐喊是每个一个小时向阿里云技能就业器进行校对技能。
龙头分析:历史同期第182期龙头分别开出号码:01→02→01,龙头开出比较密集,去年同期龙头号码下降了1个点位,对比去年龙头,今年第182期看好龙头转向上升,关注号码03。
大小分析:上期奖号大小比为11:9,走势基本平衡,近7期开奖大小比例为74:66,大号总体走势较热,本期预计大小比维持上期状态,关注大小比11:9。
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 --veriosnK8S集群部署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 kubectlK8S集群运行化
通过如下呐喊生成一个默许的成立文献:
kubeadm config print init-defaults > /home/k8s/init/kubeadm-init.yaml
奉行完上述的呐喊会在对应的目次下生成一个kubeadm-init.yaml文献,物联网app开发需要对这个文献的一些参数进行修改。
小程序开发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的形式进行拜访。 本站仅提供存储就业,通盘本色均由用户发布,如发现存害或侵权本色,请点击举报。