VPLC (VPLCnext) K8S

前序

在接觸Virtual PLCnext Control的時候,我想過好幾次如何將它運行在k8s上,由于對k8s的熟悉程度不夠,跌跌撞撞嘗試了很久,終于把vPLC部署在單機版的k8s上了。(此教程僅為demo階段,此教程僅為demo階段,此教程僅為demo階段,僅供參考與交流

  • 環境:Ubuntu24.04 Preempt-RT
  • 機器:i5-12459H
  • 測試1:OPC-UA ?
  • 測試2:Profinet Master/device?
  • 測試3:PLCnext App?

k8s VPLCnext demo需求

  1. 內核5.19以上
  2. 系統支持systemd
  3. Preempt-RT補丁
  4. 內核選項和ubuntu24.04基本一致(比如開啟macvlan、veth、cgroup等選項)

系統

這次用的操作系統是Ubuntu24.04,為了確保實時性,還需要打實時補丁。再安裝好Ubuntu24.04之后,運行下列命令

sudo apt updatesudo apt-get install linux-realtimesudo nano /etc/default/grub# 注釋hidden
# 設置timeout為10GRUB_DEFAULT=0
# GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`( . /etc/os-release; echo ${NAME:-Ubuntu} ) 2>/dev/null || echo Ubuntu`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""sudo update-grubsudo nano /boot/grub# 將linux-realtime改成默認啟動,找到對應的啟動項,將該啟動項替換到export linux_gfx_mode后面if [ "${recordfail}" != 1 ]; thenif [ -e ${prefix}/gfxblacklist.txt ]; thenif [ ${grub_platform} != pc ]; thenset linux_gfx_mode=keepelif hwmatch ${prefix}/gfxblacklist.txt 3; thenif [ ${match} = 0 ]; thenset linux_gfx_mode=keepelseset linux_gfx_mode=textfielseset linux_gfx_mode=textfielseset linux_gfx_mode=keepfi
elseset linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Ubuntu, with Linux 6.8.1-1015-realtime' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.1-1015-realtime-advanced-d712360d-c47b-4226-a398-5ee5569a179c' {recordfailload_videogfxmode $linux_gfx_modeinsmod gzioif [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fiinsmod part_gptinsmod ext2set root='hd0,gpt2'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  d712360d-c47b-4226-a398-5ee5569a179celsesearch --no-floppy --fs-uuid --set=root d712360d-c47b-4226-a398-5ee5569a179cfiecho	'Loading Linux 6.8.1-1015-realtime ...'linux	/boot/vmlinuz-6.8.1-1015-realtime root=UUID=d712360d-c47b-4226-a398-5ee5569a179c ro  quiet splash $vt_handoffecho	'Loading initial ramdisk ...'initrd	/boot/initrd.img-6.8.1-1015-realtime}

?安裝好后重啟系統,確保是實時內核

root@plcnext-VMware-Virtual-Platform:/boot/grub# uname -a
Linux plcnext-VMware-Virtual-Platform 6.8.1-1015-realtime #16-Ubuntu SMP PREEMPT_RT Wed Jan 15 21:03:54 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

安裝kubectl & kubeadm & kubelet

sudo apt-get update  
sudo apt-get install containerd 
sudo mkdir /etc/containerd  sudo nano  /etc/containerd/config.toml version = 2root = "/var/lib/containerd"state = "/run/containerd"disabled_plugins = []required_plugins = ["io.containerd.grpc.v1.cri"]oom_score = -999# Alibaba Cloud Vendor enhancement configuration# imports = ["/etc/containerd/alibabacloud.toml"][grpc]address = "/run/containerd/containerd.sock"max_recv_message_size = 16777216max_send_message_size = 16777216[debug]address = "/run/containerd/debug.sock"level = "info"[timeouts]"io.containerd.timeout.shim.cleanup" = "5s""io.containerd.timeout.shim.load" = "5s""io.containerd.timeout.shim.shutdown" = "3s""io.containerd.timeout.task.state" = "2s"[plugins][plugins."io.containerd.gc.v1.scheduler"]pause_threshold = 0.02deletion_threshold = 0mutation_threshold = 100schedule_delay = "0s"startup_delay = "100ms"[plugins."io.containerd.grpc.v1.cri"]sandbox_image = "registry-cn-shanghai.ack.aliyuncs.com/acs/pause:3.9"ignore_image_defined_volumes = true[plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "overlayfs"default_runtime_name = "runc"disable_snapshot_annotations = truediscard_unpacked_layers = false[plugins."io.containerd.grpc.v1.cri".containerd.runtimes][plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]runtime_type = "io.containerd.runc.v2"privileged_without_host_devices = false[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]NoPivotRoot = falseNoNewKeyring = falseSystemdCgroup = true[plugins."io.containerd.grpc.v1.cri".cni]bin_dir = "/opt/cni/bin"conf_dir = "/etc/cni/net.d"max_conf_num = 1[plugins."io.containerd.grpc.v1.cri".registry]config_path = "/etc/containerd/cert.d"[plugins."io.containerd.internal.v1.opt"]path = "/opt/containerd"[plugins."io.containerd.internal.v1.restart"]interval = "10s"[plugins."io.containerd.metadata.v1.bolt"]content_sharing_policy = "shared"
sudo apt install curlcurl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgecho 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get update  
sudo apt-get install -y kubelet kubeadm kubectl  
sudo apt-mark hold kubelet kubeadm kubectl  sudo swapoff -a                   # off swap
sudo sed -i '/swap/d' /etc/fstab  # off swap need reboot systemreboot

重啟后,再執行

sudo su
bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsudo modprobe br-netfilter  
kubeadm init --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16  mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

安裝Flannel

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml# if download failed like ImagePullError, delete it and it will auto build again
# 如果下載失敗了,刪除pod后,會自動重新下載
kubectl get pods -n kube-flannel
kubectl delete pod kube-flannel-ds-<xxxx> -n kube-flannel

安裝Multus

kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset-thick.yml

確保都在運行

root@plcnext-virtual-machine:/home/plcnext/vplc_k8s# kubectl get pods -A
NAMESPACE      NAME                                              READY   STATUS             RESTARTS          AGE
kube-flannel   kube-flannel-ds-mz5xf                             1/1     Running            5 (42d ago)       42d
kube-system    kube-multus-ds-rk2w6                              1/1     Running            0                 19hkubectl get pods -n kube-system | grep multuskube-multus-ds-rk2w6                              1/1     Running            0                 19h

為vPLC創建Macvlan NIC

nano macvlan-net.yaml

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:name: macvlan-eth1annotations:k8s.v1.cni.cncf.io/resourceName: macvlan.network.k8s.io/eth1
spec:config: '{"cniVersion": "0.3.1","name": "macvlan-eth1","type": "macvlan","master": "ens33","mode": "bridge","ipam": {"type": "static","addresses": [{"address": "192.168.10.152/24","gateway": "192.168.10.1"}],"routes": [{"dst": "0.0.0.0/0","gw": "192.168.10.1"}],"dns": {"nameservers": ["8.8.8.8", "8.8.4.4"]}}}'

應用macvlan NIC

kubectl apply -f macvlan-net.yaml

檢查是否正常工作

root@:kubectl get network-attachment-definitions.k8s.cni.cncf.io -ANAMESPACE   NAME           AGE
default     macvlan-eth1   19hroot@: kubectl describe network-attachment-definitions.k8s.cni.cncf.io macvlan-eth1 -n defaultName:         macvlan-eth1
Namespace:    default
Labels:       <none>
Annotations:  k8s.v1.cni.cncf.io/resourceName: macvlan.network.k8s.io/eth1
API Version:  k8s.cni.cncf.io/v1
Kind:         NetworkAttachmentDefinition
Metadata:Creation Timestamp:  2025-05-13T05:19:50ZGeneration:          1Resource Version:    43216UID:                 e1babe8b-d9f0-4646-8013-9d57896444f3
Spec:Config:  { "cniVersion": "0.3.1", "name": "macvlan-eth1", "type": "macvlan", "master": "ens33", "mode": "bridge", "ipam": { "type": "static", "addresses": [ { "address": "192.168.10.152/24", "gateway": "192.168.10.1" } ], "routes": [ { "dst": "0.0.0.0/0", "gw": "192.168.10.1" } ], "dns": { "nameservers": ["8.8.8.8", "8.8.4.4"] } } }
Events:    <none>

創建VPLC pod yaml

nano pod.yaml
apiVersion: v1
kind: Pod
metadata:annotations:io.podman.annotations.ulimit: rtprio=-1:-1,nofile=1024:10024k8s.v1.cni.cncf.io/networks: |-[{"name": "macvlan-eth1","interface": "eth1" }]name: my-pod
spec:tolerations:- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"containers:- env:- name: HOSTNAMEvalue: VL3-PLCNEXT-x86-64image: registry.k8s.io/vplcnextcontrol1000-x86-64:78name: vplcnextcontrol1000command: ["/usr/lib/systemd/systemd"]imagePullPolicy: NeversecurityContext:privileged: truevolumeMounts:- mountPath: /dev/fusename: fuse-device- mountPath: /opt/plcnext/config/name: env1-config-pvc- mountPath: /opt/plcnext/appsname: env1-apps-pvc- mountPath: /opt/plcnext/data/name: env1-data-pvc- mountPath: /opt/plcnext/projects/name: env1-projects-pvc- mountPath: /opt/plcnext/logsname: env1-logs-pvchostname: vl3-plcnext-x86volumes:- name: fuse-devicehostPath:path: /dev/fusetype: CharDevice- name: env1-config-pvcpersistentVolumeClaim:claimName: env1-config-pvc- name: env1-apps-pvcpersistentVolumeClaim:claimName: env1-apps-pvc- name: env1-data-pvcpersistentVolumeClaim:claimName: env1-data-pvc- name: env1-projects-pvcpersistentVolumeClaim:claimName: env1-projects-pvc- name: env1-logs-pvcpersistentVolumeClaim:claimName: env1-logs-pvc

更新vplc鏡像到本地k8s.io

#load imagectr -n k8s.io images import vplcnextcontrol1000-x86-64-2025.0.0-25.0.0.78.tar# change tagctr -n k8s.io images tag \import-2025-05-14:vplcnextcontrol1000-x86-64 \registry.k8s.io/vplcnextcontrol1000-x86-64:78# delete old tagctr -n k8s.io images rm import-2025-05-14:vplcnextcontrol1000-x86-64

檢查鏡像

oot@plcnext-VMware-Virtual-Platform:/etc/cni/net.d# ctr -n=k8s.io images list
REF                                                                                                                                                      TYPE                                                      DIGEST                                                                  SIZE      PLATFORMS                                                                     LABELS                                                          
ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1                                                                                                    application/vnd.oci.image.index.v1+json                   sha256:f1812994f0edbcb5bb5ccb63be2147ba6ad10e1faaa7ca9fcdad4f441739d84f 4.6 MiB   linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x  io.cri-containerd.image=managed                                 
ghcr.io/flannel-io/flannel-cni-plugin@sha256:f1812994f0edbcb5bb5ccb63be2147ba6ad10e1faaa7ca9fcdad4f441739d84f                                            application/vnd.oci.image.index.v1+json                   sha256:f1812994f0edbcb5bb5ccb63be2147ba6ad10e1faaa7ca9fcdad4f441739d84f 4.6 MiB   linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x  io.cri-containerd.image=managed                                 
ghcr.io/flannel-io/flannel:v0.26.7                                                                                                                       application/vnd.oci.image.index.v1+json                   sha256:7f471907fa940f944867270de4ed78121b8b4c5d564e17f940dc787cb16dea82 31.5 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x  io.cri-containerd.image=managed                                 
ghcr.io/flannel-io/flannel@sha256:7f471907fa940f944867270de4ed78121b8b4c5d564e17f940dc787cb16dea82                                                       application/vnd.oci.image.index.v1+json                   sha256:7f471907fa940f944867270de4ed78121b8b4c5d564e17f940dc787cb16dea82 31.5 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x  io.cri-containerd.image=managed                                 
ghcr.io/k8snetworkplumbingwg/multus-cni:snapshot-thick                                                                                                   application/vnd.docker.distribution.manifest.list.v2+json sha256:97792a778f41c6fcc31fc08615f2c0f5fd89ae4d9f402e78528c76ec5c2c5fd1 170.9 MiB linux/amd64,linux/arm/v7,linux/arm/v8,linux/arm64,linux/ppc64le,linux/s390x   io.cri-containerd.image=managed                                 
ghcr.io/k8snetworkplumbingwg/multus-cni@sha256:97792a778f41c6fcc31fc08615f2c0f5fd89ae4d9f402e78528c76ec5c2c5fd1                                          application/vnd.docker.distribution.manifest.list.v2+json sha256:97792a778f41c6fcc31fc08615f2c0f5fd89ae4d9f402e78528c76ec5c2c5fd1 170.9 MiB linux/amd64,linux/arm/v7,linux/arm/v8,linux/arm64,linux/ppc64le,linux/s390x   io.cri-containerd.image=managed                                 
registry-cn-shanghai.ack.aliyuncs.com/acs/pause:3.9                                                                                                      application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 314.0 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed,io.cri-containerd.pinned=pinned 
registry-cn-shanghai.ack.aliyuncs.com/acs/pause@sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 314.0 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed,io.cri-containerd.pinned=pinned 
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.10.1                                                                                      application/vnd.docker.distribution.manifest.list.v2+json sha256:90d3eeb2e2108a14fe2ecbef1bc1b5607834335d99c842a377f338aade9da028 15.4 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns@sha256:90d3eeb2e2108a14fe2ecbef1bc1b5607834335d99c842a377f338aade9da028                      application/vnd.docker.distribution.manifest.list.v2+json sha256:90d3eeb2e2108a14fe2ecbef1bc1b5607834335d99c842a377f338aade9da028 15.4 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.15-0                                                                                        application/vnd.docker.distribution.manifest.list.v2+json sha256:d0e1bc44b9bc37d0b63612e1a11b43e07bc650ffc0545d58f7991607460974d4 54.3 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd@sha256:d0e1bc44b9bc37d0b63612e1a11b43e07bc650ffc0545d58f7991607460974d4                         application/vnd.docker.distribution.manifest.list.v2+json sha256:d0e1bc44b9bc37d0b63612e1a11b43e07bc650ffc0545d58f7991607460974d4 54.3 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.28.15                                                                              application/vnd.docker.distribution.manifest.list.v2+json sha256:ad05900683464980ef45b957b8da61dc33eaefe4df2318abc7bfe9b13a46cbb8 32.8 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver@sha256:ad05900683464980ef45b957b8da61dc33eaefe4df2318abc7bfe9b13a46cbb8               application/vnd.docker.distribution.manifest.list.v2+json sha256:ad05900683464980ef45b957b8da61dc33eaefe4df2318abc7bfe9b13a46cbb8 32.8 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.28.15                                                                     application/vnd.docker.distribution.manifest.list.v2+json sha256:2d54389718888db44390e85df3201f356d213be2df06365e782ba2ab0154ee42 31.8 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager@sha256:2d54389718888db44390e85df3201f356d213be2df06365e782ba2ab0154ee42      application/vnd.docker.distribution.manifest.list.v2+json sha256:2d54389718888db44390e85df3201f356d213be2df06365e782ba2ab0154ee42 31.8 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.28.15                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:6dd470206000214b25123febf230af297375469037dc18619fd75a5528cff215 27.0 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy@sha256:6dd470206000214b25123febf230af297375469037dc18619fd75a5528cff215                   application/vnd.docker.distribution.manifest.list.v2+json sha256:6dd470206000214b25123febf230af297375469037dc18619fd75a5528cff215 27.0 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.28.15                                                                              application/vnd.docker.distribution.manifest.list.v2+json sha256:50bf0089b068e77c7b57d0c225840aa90b020d16bc9d76d8463fb34597e9509b 17.7 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler@sha256:50bf0089b068e77c7b57d0c225840aa90b020d16bc9d76d8463fb34597e9509b               application/vnd.docker.distribution.manifest.list.v2+json sha256:50bf0089b068e77c7b57d0c225840aa90b020d16bc9d76d8463fb34597e9509b 17.7 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9                                                                                            application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 314.0 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed                                 
registry.cn-hangzhou.aliyuncs.com/google_containers/pause@sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097                        application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 314.0 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed                                 
registry.k8s.io/vplcnextcontrol1000-x86-64:78                                                                                                            application/vnd.oci.image.manifest.v1+json                sha256:f3f4c9ee6a734e4498b2216739c542cfe8b5981215421aab8007cbf840da7e59 224.7 MiB linux/amd64                                                                   io.cri-containerd.image=managed                                 
sha256:10541d8af03f40fae257735edd69b6c5dd0084bb9796649409ac7b5660705148                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:2d54389718888db44390e85df3201f356d213be2df06365e782ba2ab0154ee42 31.8 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
sha256:29bd7bbb1c041945b8111bf2ecb5d4e656d56bdc3db7d5119b52fa5797780552                                                                                  application/vnd.oci.image.manifest.v1+json                sha256:f3f4c9ee6a734e4498b2216739c542cfe8b5981215421aab8007cbf840da7e59 224.7 MiB linux/amd64                                                                   io.cri-containerd.image=managed                                 
sha256:2e96e5913fc06e3d26915af3d0f2ca5048cc4b6327e661e80da792cbf8d8d9d4                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:d0e1bc44b9bc37d0b63612e1a11b43e07bc650ffc0545d58f7991607460974d4 54.3 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed                                 
sha256:55ce2385d9d8c6f720091c177fbe885a21c9dc07c9e480bfb4d94b3001f58182                                                                                  application/vnd.oci.image.index.v1+json                   sha256:f1812994f0edbcb5bb5ccb63be2147ba6ad10e1faaa7ca9fcdad4f441739d84f 4.6 MiB   linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x  io.cri-containerd.image=managed                                 
sha256:965b9dd4aa4c1b6b68a4c54a166692b4645b6e6f8a5937d8dc17736cb63f515e                                                                                  application/vnd.oci.image.index.v1+json                   sha256:7f471907fa940f944867270de4ed78121b8b4c5d564e17f940dc787cb16dea82 31.5 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/riscv64,linux/s390x  io.cri-containerd.image=managed                                 
sha256:9d3465f8477c6b383762d90ec387c9d77da8a402a849265805f86feaa57aeeea                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:50bf0089b068e77c7b57d0c225840aa90b020d16bc9d76d8463fb34597e9509b 17.7 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
sha256:9dc6939e7c573673801790fcfad6f994282c216e005578f5836b5fafc6685fc2                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:ad05900683464980ef45b957b8da61dc33eaefe4df2318abc7bfe9b13a46cbb8 32.8 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
sha256:ba6d7f8bc25be40b51dfeb5ddfda697527ba55073620c1c5fa04a5f0ae9e3816                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:6dd470206000214b25123febf230af297375469037dc18619fd75a5528cff215 27.0 MiB  linux/amd64,linux/arm64,linux/ppc64le,linux/s390x                             io.cri-containerd.image=managed                                 
sha256:cd453b9857733f7230c435f941ae5b4ec835627732f18f9278f05375122c9bf5                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:97792a778f41c6fcc31fc08615f2c0f5fd89ae4d9f402e78528c76ec5c2c5fd1 170.9 MiB linux/amd64,linux/arm/v7,linux/arm/v8,linux/arm64,linux/ppc64le,linux/s390x   io.cri-containerd.image=managed                                 
sha256:e6f1816883972d4be47bd48879a08919b96afcd344132622e4d444987919323c                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 314.0 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64  io.cri-containerd.image=managed,io.cri-containerd.pinned=pinned 
sha256:ead0a4a53df89fd173874b46093b6e62d8c72967bbf606d672c9e8c9b601a4fc                                                                                  application/vnd.docker.distribution.manifest.list.v2+json sha256:90d3eeb2e2108a14fe2ecbef1bc1b5607834335d99c842a377f338aade9da028 15.4 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed                                 
sha256:fcacad112e0df0b551f562f2ba6c6c94cd2a47c761c5a36eb525091fae2b721d                                                                                  application/vnd.docker.distribution.manifest.v2+json      sha256:e17cd0e26a6fad98b670af17b41cbac8b17e997a2759e3cadb6816feef680b69 165.3 MiB linux/amd64                                                                   io.cri-containerd.image=managed                                 
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/k8snetworkplumbingwg/multus-cni:snapshot-thick                                                          application/vnd.docker.distribution.manifest.v2+json      sha256:e17cd0e26a6fad98b670af17b41cbac8b17e997a2759e3cadb6816feef680b69 165.3 MiB linux/amd64                                                                   io.cri-containerd.image=managed                                 
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/k8snetworkplumbingwg/multus-cni@sha256:e17cd0e26a6fad98b670af17b41cbac8b17e997a2759e3cadb6816feef680b69 application/vnd.docker.distribution.manifest.v2+json      sha256:e17cd0e26a6fad98b670af17b41cbac8b17e997a2759e3cadb6816feef680b69 165.3 MiB linux/amd64                                                                   io.cri-containerd.image=managed      

創建持久卷

nano env1-vplc-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: env1-apps-pv
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain  hostPath:path: /mnt/data/env1-apps  
---
apiVersion: v1
kind: PersistentVolume
metadata:name: env1-config-pv
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain  hostPath:path: /mnt/data/env1-config
---
apiVersion: v1
kind: PersistentVolume
metadata:name: env1-data-pv
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain  hostPath:path: /mnt/data/env1-data
---
apiVersion: v1
kind: PersistentVolume
metadata:name: env1-projects-pv
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain  hostPath:path: /mnt/data/env1-projects
---
apiVersion: v1
kind: PersistentVolume
metadata:name: env1-logs-pv
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain  hostPath:path: /mnt/data/env1-logs
nano env1-vplc-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: env1-apps-pvc  
spec:volumeName: env1-apps-pvaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: env1-config-pvc  
spec:volumeName: env1-config-pvaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: env1-data-pvc  
spec:volumeName: env1-data-pvaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: env1-projects-pvc  
spec:volumeName: env1-projects-pvaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: env1-logs-pvc  
spec:volumeName: env1-logs-pvaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi
# apply pv first, then apply pvckubectl apply -f env1-vplc-pv.yaml
kubectl apply -f env1-vplc-pvc.yamlmkdir /mnt/data

檢查PV和PVC

root@plcnext-VMware-Virtual-Platform:/home/plcnext/vplc# kubectl get pv
NAME               CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                       STORAGECLASS   REASON   AGE
env1-apps-pv       1Gi        RWO            Retain           Bound    default/env1-apps-pvc                               67m
env1-config-pv     1Gi        RWO            Retain           Bound    default/env1-config-pvc                             66m
env1-data-pv       1Gi        RWO            Retain           Bound    default/env1-data-pvc                               66m
env1-logs-pv       1Gi        RWO            Retain           Bound    default/env1-logs-pvc                               66m
env1-projects-pv   1Gi        RWO            Retain           Bound    default/env1-projects-pvc                           66m
root@plcnext-VMware-Virtual-Platform:/home/plcnext/vplc# kubectl get pvc
NAME                STATUS   VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS   AGE
env1-apps-pvc       Bound    env1-apps-pv       1Gi        RWO                           67m
env1-config-pvc     Bound    env1-config-pv     1Gi        RWO                           66m
env1-data-pvc       Bound    env1-data-pv       1Gi        RWO                           66m
env1-logs-pvc       Bound    env1-logs-pv       1Gi        RWO                           66m
env1-projects-pvc   Bound    env1-projects-pv   1Gi        RWO                           66m

創建K8S容器

kubectl apply -f pod.yaml
kubectl exec -it my-pod -c vplcnextcontrol1000 -- bash

修改Network

默認有一個錯誤的ip地址和路由?192.168.1.10?&?192.168.1.1.

這是由于VPLC的固件中?/usr/lib/systemd/network/80-wired.network 導致的

刪除所有的192.168.1.* ,并修改79-if-1.network和79-if-2.network填寫gateway和ipaddress

ip route del default via 192.168.1.1 dev eth0
ip route del default via 192.168.1.1 dev eth1
ip addr del 192.168.1.10/24 dev eth0
ip addr del 192.168.1.10/24 dev eth1
ip route del default via 192.168.10.1 dev eth1
ip route add default via 192.168.10.1 dev eth1 proto static metric 100systemctl restart arp-preinit.servicenano /etc/systemd/network/79-if-1.network
nano /etc/systemd/network/79-if-2.networksystemctl restart plcnext

拷貝文件

kubectl cp ./pack.zip default/my-pod:/opt/plcnextkubectl exec -it my-pod -c vplcnextcontrol1000 -- bashunzip pack.zipcd packcp -r apps config data projects ../chmod 777 -R /opt/plcnext/apps /opt/plcnext/config /opt/plcnext/data /opt/plcnext/projects

重啟系統

systemctl restart plcnext

修正防火墻

systemctl restart firewall-preinit
systemctl restart firewall
systemctl restart plcnext
# now the firewall should work

修正Profinet Device設備

固件里默認NIC0是作為pn的NIC,但是現在NIC1才是macvlan設備,所以要設置為NIC1

nano /etc/plcnext/Device.redefine.acf.settings<EnvironmentVariable name="ARP_SETTING_PN_CONTROLLER_ADAPTER_INDEX" value="1" redefine="true" />
<EnvironmentVariable name="ARP_SETTING_PN_DEVICE_ADAPTER_INDEX" value="1" redefine="true" />change to =><EnvironmentVariable name="ARP_SETTING_PN_CONTROLLER_ADAPTER_INDEX" value="2" redefine="true" />
<EnvironmentVariable name="ARP_SETTING_PN_DEVICE_ADAPTER_INDEX" value="2" redefine="true" />nano /etc/plcnext/device/Io/PnS/PnS.target.config      <Var name="InterfaceName">eth0</Var>change to =><Var name="InterfaceName">eth1</Var>systemctl restart plcnext# check wbm profinet 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84099.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OPC Client第5講(wxwidgets):初始界面的事件處理;按照配置文件初始化界面的內容

接上一講&#xff0c;即實現下述界面的事件處理代碼&#xff1b;并且按照配置文件初始化界面的內容&#xff08;三、&#xff09; 事件處理的基礎知識&#xff0c;見下述鏈接五、 OPC Client第3講&#xff08;wxwidgets&#xff09;&#xff1a;wxFormBuilder&#xff1b;基礎…

從乳制品行業轉型看智能化升級新機遇——兼談R2AIN SUITE的賦能實踐

一、市場現狀&#xff1a;乳制品行業迎來智能化轉型關鍵期 中國乳制品行業在經歷高速增長與深度調整后&#xff0c;已進入以"安全、效率、創新"為核心的新發展階段。根據施耐德電氣白皮書數據顯示&#xff0c;2019年乳制品合格率達99.8%[1]&#xff0c;液態奶占據77…

[20250522]目前市場上主流AI開發板及算法盒子的芯片配置、架構及支持的AI推理框架的詳細梳理

目前市場上主流AI開發板及算法盒子的芯片配置、架構及支持的AI推理框架的詳細梳理

【Golang筆記03】error、panic、fatal錯誤處理學習筆記

Golang筆記&#xff1a;錯誤處理學習筆記 一、進階學習 1.1、錯誤&#xff08;異常處理&#xff09; Go語言中也有和Java中的異常處理相關的機制&#xff0c;不過&#xff0c;在Go里面不叫異常&#xff0c;而是叫做&#xff1a;錯誤。錯誤分為三類&#xff0c;分別是&#x…

Python可視化設計原則

在數據驅動的時代&#xff0c;可視化不僅是結果的呈現方式&#xff0c;更是數據故事的核心載體。Python憑借其豐富的生態庫&#xff08;Matplotlib/Seaborn/Plotly等&#xff09;&#xff0c;已成為數據可視化領域的主力工具。但工具只是起點&#xff0c;真正讓圖表產生價值的&…

??WPF入門與XAML基礎:從零開始構建你的第一個WPF應用?

從零開始構建你的第一個WPF應用? 1.什么是WPF&#xff1f;??2.開發環境搭建??2.1 安裝Visual Studio??2.2 創建第一個WPF項目?? 3. WPF項目結構解析????3.1 MainWindow.xaml??3.2 MainWindow.xaml.cs?? 4. XAML基礎語法??4.1 屬性賦值方式??4.2 命名空間&…

電子電氣架構 --- 下一代汽車電子電氣架構中的連接性

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

學習日記-day13-5.22

完成目標&#xff1a; 知識點&#xff1a; 1.抽象注意事項 知識點 核心內容 重點 抽象類實例化限制 抽象類不能直接實例化對象&#xff0c;只能創建非抽象子類的對象 嘗試實例化抽象類會觸發編譯錯誤 抽象方法與抽象類關系 抽象類不一定包含抽象方法&#xff0c;但含…

華碩無畏Pro14 2025,打造舒適辦公新體驗

在快節奏、高效率的現代辦公環境中&#xff0c;一臺得心應手的筆記本無疑是每位職場人士的“第二大腦”與核心生產力工具。它不僅需要承載日常工作的繁雜事務&#xff0c;更要在關鍵時刻穩定輸出&#xff0c;助力我們從容應對各種挑戰。 洞悉此需求&#xff0c;華碩推出了全新…

重寫B站(網頁、后端、小程序)

1. 網頁端 1.1 框架 Vue ElementUI axios 1.2 框架搭建步驟 搭建Vue 1.3 配置文件 main.js import {createApp} from vue import ElementUi from element-plus import element-plus/dist/index.css; import axios from "axios"; import router from…

MySQL數據 在 磁盤上是什么樣子的

MySQL數據 在 磁盤上是什么樣子的&#xff0c;取決于所使用的存儲引擎。存儲于引擎 是作用在 表! 上的。 存儲引擎 百度百科是這樣定義存儲引擎的&#xff1a;MySQL 中的數據用各種不同的技術存儲在文件&#xff08;或者內存&#xff09;中&#xff0c;這些不同的技術以及配套…

MySQL的相關操作

目錄 一. 字符串函數 二. group by分組 2.1 作用 2.2 格式 2.3 舉例 三. order by排序 3.1 格式 3.2 舉例 四. limit 4.1 作用 4.2 舉例 五. having 5.1 作用 5.2 舉例 六. 正則表達式 七. 多表查詢 7.1 定義 7.2 子查詢 7.3 聯合查詢 縱向合并 7.4 交叉連…

網絡安全-等級保護(等保) 2-7-3 GB/T 25058—2019 第7章 安全設計與實施

############################################################################### 對于安全廠家而言&#xff0c;最關心的內容在本章節&#xff0c;根據已確定的安全總體方案&#xff0c;完成技術措施和管理措施的詳細設計和實施&#xff0c;包含具體的安全產品和管理要求。…

【Spring Boot】配置實戰指南:Properties與YML的深度對比與最佳實踐

目錄 1.前言 2.正文 2.1配置文件的格式 2.2properties 2.2.1基礎語法 2.2.2value讀取配置文件 2.2.3缺點 2.3yml 2.3.1基礎語法 2.3.2配置不同數據類型 2.3.3配置讀取 2.3.4配置對象和集合 2.3.5優缺點 2.4綜合練習&#xff1a;驗證碼案例 2.4.1分析需求 2.4.2…

20250519使用TF卡將NanoPi NEO core開發板刷機為Ubuntu core22.04.3系統完成之后執行poweroff自動關機

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解壓縮/ubuntu20.04下使用tar 2、Win32DiskImager.exe 寫如32GB的TF卡。【以管理員身份運行】 3、TF卡如果已經做過會有3個磁盤分區&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5_WinE…

編譯Qt5.15.16并啟用pdf模塊

編譯Qt5.15.16并啟用pdf模塊 標題1.目錄設置 -q-bulid –qt-everywhere-src-5.15.16 –bulid cd bulid 必須&#xff0c;否則會提示Project ERROR: You cannot configure qt separately within a top-level build. create .qmake.stash and .qmake.super in build folder …

“智”斗秸稈焚燒,考拉悠然以科技之力筑牢生態安全防線

清晨&#xff0c;薄霧籠罩著遼闊的田野&#xff0c;農民們開始了一天的勞作。然而&#xff0c;隨著收割季的到來&#xff0c;秸稈焚燒問題也逐漸浮現&#xff0c;成為威脅空氣質量與生態安全的隱患。傳統監管方式往往顯得力不從心&#xff0c;效率低下的困境亟待突破。在此背景…

Nockchain項目部署教程

Nockchain頭礦窗口正在打開&#xff0c;不拼設備&#xff0c;現在部署&#xff0c;馬上就要開挖了。 一、項目介紹 Nockchain 是結合了POW和ZKVM的區塊鏈協議。 主要特點&#xff1a; 1&#xff09;計算存儲新域名空間三位一體架構&#xff0c;高吞吐量 2&#xff09;使用No…

2025年氣候持續大風,消納減少,如何保收益?東潤能源整體解決方案持續保收益保增長

引言 隨著全球氣候變化加劇,2025年極端天氣頻發,風資源豐富但電網消納能力不足的問題日益突出,導致許多風電項目面臨限電、收益下滑的挑戰。如何在復雜的氣候和電力市場環境下保障投資收益,成為行業關注的焦點。東潤能源憑借領先的技術創新和綜合能源解決方案,為風電行業…

2023河南CCPC省賽vp部分補題

A 模擬 暴力 對每個合法的前綴&#xff0c;判斷后綴是不是合法 int a[29]; void solve(){string s;cin>>s;int t-1;if(s.size()1){return cout<<"NaN"<<endl,void();}for(int i0;i<27;i) a[i]0;for(int i0;i<s.size();i){a[s[i]-a];if(…