Update Portworx file system dependencies
The Portworx Enterprise container ships with an archive containing precompiled modules for the kernels which were available at the time the container was released. If a kernel is released after a Portworx release, a pre-compiled version of the modules will not exist in the container. If Portworx is deployed in a setup which does not have access to mirrors.portworx.com
to download the latest modules (for example, an air-gapped deployment), then Portworx will fail to come up.
Alternatively, in such deployments, you can publish the updated containers to internal container repositories where Portworx can download the new kernel modules.
Regardless of whether your cluster accesses the updated container through mirrors.portworx.com
or an internal container registry, you can use that container to update your nodes' Portworx installation to include the latest batch of precompiled modules. Perform the update by running a DaemonSet in the cluster where Portworx has been installed.
Update filesystem dependencies
- Non-airgapped
- Airgapped
- IBM
Run the following command to download the correct version of the manifest that installs a DaemonSet in your cluster. Substitute
<px-version>
with the specific Portworx version you require:REL="/<px-version>" && curl -fsL -o pxlibupdate-spec.yaml "https://install.portworx.com${REL}?comp=pxlibupdate"
Apply the spec:
kubectl apply -f pxlibupdate-spec.yaml
Inspect the pod log to determine success or failure of the update.
Run the following command to restart all Portworx pods:
kubectl label nodes --all px/service=restart --overwrite
Wait for a few minutes for the Portworx pods to restart. You will notice that Portworx is deployed with the latest kernel version.
On your air-gapped cluster, run the following command to download the correct version of the manifest that installs a DaemonSet in your cluster. Substitute
<px-version>
with the specific Portworx version you require:REL=/<px-version> && curl -fsL "https://install.portworx.com${REL}?comp=pxlibupdate" | grep image: | sed 's/image://'
portworx/px-lib:pxfslibs-<px-version>-mver<xx>-update
infoIf you are using an internal registry, you can prepend your internal register name to the image name. When you run the following command, the image will be fetched from the specified internal registry rather than an external source:
REL=/3.1.0 && curl -fsL "https://install.portworx.com${REL}?comp=pxlibupdate®=internal-registry"` | grep image: | sed 's/image://'
internal-registry/portworx/px-lib:pxfslibs-3.1.0-mver12-update
Ensure that the DaemonSet in your internal image registry uses the above image. If utilizing an internal registry, pull the image from the external registry, tag it, and then push it to the internal registry.:
docker pull portworx/px-lib:pxfslibs<px-version>mver<xx>-update
docker tag portworx/px-lib:pxfslibs<px-version>mver<xx>-update <internal-registry>/portworx/px-lib:pxfslibs<px-version>-mver<xx>-update
docker push <internal-registry>/portworx/px-lib:pxfslibs<px-version>-mver<xx>-updateApply the spec:
kubectl apply -f pxlibupdate-spec.yaml
Inspect the pod log to determine success or failure of the update.
Run the following command to restart all Portworx pods:
kubectl label nodes --all px/service=restart --overwrite
Wait for a few minutes for the Portworx pods to restart. You will notice that Portworx is deployed with the latest kernel version.
To update Portworx filesystem dependencies on an IBM Cloud environment, perform the following steps:
Download the
pxlibupdate-spec.yaml
file:curl -fsL -o pxlibupdate-spec.yaml "https://install.portworx.com?comp=pxlibupdate"
Edit the downloaded YAML file:
sed -i -e "s#image: portworx/px-lib:pxfslibs-#image: icr.io/ext/portworx/px-lib:pxfslibs-#g" pxlibupdate-spec.yaml
sed -i -e '/- key: node-role.kubernetes.io/master/d' pxlibupdate-spec.yaml
sed -i -e '/operator: DoesNotExist/d' pxlibupdate-spec.yamlnoteIf you are using the Red Hat OpenShift on IBM Cloud (IBM ROKS) environment, append the following additional environmental variable:
sed -i -e MIRRORS_SERVER=https://px-mirror.storage.cloud.ibm.com
Apply the edited YAML file:
kubectl apply -f pxlibupdate-spec.yaml
Inspect the pod log to determine success or failure of the update.
Verify that all
pxlibupdate
pods are running:kubectl get pods -n kube-system -l name=px-libs-update
NAME READY STATUS RESTARTS AGE
px-libs-update-m8jvs 1/1 Running 0 42s
px-libs-update-mgmcp 1/1 Running 0 42s
px-libs-update-qt44w 1/1 Running 0 42sRun the following command to restart all Portworx pods:
kubectl label nodes --all px/service=restart --overwrite
Wait for a few minutes for the Portworx pods to restart. You will notice that Portworx is deployed with the latest kernel version.
The DaemonSet above will update the pre-compiled module archives within the Portworx install location on the node (for example, /opt/pwx
).
Note that this process assumes that Portworx is already installed since it will only update an existing installation. The existing installation's version will be checked for compatibility with the update container, and if it is not compatible, then the update will not be done.