From aea958da4a6d2aaf5ed4179c78b3be4a7ee3aa17 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 20 Jan 2022 12:38:47 +0800 Subject: [PATCH 01/17] update aks doc to use Azure File NFS share. Signed-off-by: galiacheng Changes to be committed: modified: documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md modified: documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt --- .../azure-kubernetes-service/domain-on-pv.md | 56 ++-- .../includes/create-aks-cluster-storage.txt | 292 +++++++++--------- 2 files changed, 178 insertions(+), 170 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md index 327ce3a0f3f..23e17f622a1 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -15,7 +15,7 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](/weblogic - [Create WebLogic domain](#create-weblogic-domain) - [Automation](#automation) - [Deploy sample application](#deploy-sample-application) - - [Access WebLogic Server logs](#access-weblogic-server-logs) + - [Validate NFS volume](#validate-nfs-volume) - [Clean up resources](#clean-up-resources) - [Troubleshooting](#troubleshooting) - [Useful links](#useful-links) @@ -26,7 +26,7 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](/weblogic ##### Clone WebLogic Kubernetes Operator repository -Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. We will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.1.1, but should work with the latest release. +Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. We will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.3.7, but should work with the latest release. ```shell $ git clone --branch v{{< latestVersion >}} https://github.com/oracle/weblogic-kubernetes-operator.git @@ -52,17 +52,15 @@ Kubernetes Operators use [Helm](https://helm.sh/) to manage Kubernetes applicati $ helm repo add weblogic-operator https://oracle.github.io/weblogic-kubernetes-operator/charts --force-update ``` ```shell -$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.1.1" +$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" ``` The output will show something similar to the following: ```shell -$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.1.1" -``` -``` +$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" NAME: weblogic-operator -LAST DEPLOYED: Wed Jul 1 23:47:44 2020 +LAST DEPLOYED: Tue Jan 18 17:07:56 2022 NAMESPACE: default STATUS: deployed REVISION: 1 @@ -116,7 +114,7 @@ $ export SECRET_NAME_DOCKER="${NAME_PREFIX}regcred" ``` # cd kubernetes/samples/scripts/create-kubernetes-secrets ``` -```sehll +```shell $ ./create-docker-credentials-secret.sh -s ${SECRET_NAME_DOCKER} -e oracleSsoEmail@bar.com -p oracleSsoPassword -u oracleSsoEmail@bar.com ``` ``` @@ -131,7 +129,6 @@ $ kubectl get secret ``` ``` NAME TYPE DATA AGE -wlsazure-secret Opaque 2 17m regcred kubernetes.io/dockerconfigjson 1 2m25s default-token-csdvd kubernetes.io/service-account-token 3 25m domain1-weblogic-credentials Opaque 2 3m42s @@ -166,10 +163,8 @@ We need to set up the domain configuration for the WebLogic domain. --file-share ${AKS_PERS_SHARE_NAME} \ --storage-account ${AKS_PERS_STORAGE_ACCOUNT_NAME} \ --domain-uid domain1 \ - --pv-name ${NAME_PREFIX}-azurefile-${TIMESTAMP} \ --pvc-name ${NAME_PREFIX}-azurefile-${TIMESTAMP} \ - --secret-docker ${SECRET_NAME_DOCKER} \ - --secret-storage ${SECRET_NAME_AZURE_FILE} + --secret-docker ${SECRET_NAME_DOCKER} ``` You will see output with `PASS` if all the resources are ready. The following is an example of output: @@ -181,10 +176,8 @@ We need to set up the domain configuration for the WebLogic domain. Azure Kubenetes Service instacne: wlsaks1612795811 Azure storage account: wlsstorage1612795811 Azure file share: wls-weblogic-1612795811 - Kubenetes secret for Azure storage: wlsazure-secret Kubenetes secret for Docker Account: regcred Kubenetes secret for Weblogic domain: domain1-weblogic-credentials - Persistent Volume: wls-azurefile-1612795811 Persistent Volume Claim: wls-azurefile-1612795811 ``` @@ -510,7 +503,7 @@ For input values, you can edit `kubernetes/samples/scripts/create-weblogic-domai | `dockerEmail` | `yourDockerEmail` | Oracle Single Sign-On (SSO) account email, used to pull the WebLogic Server Docker image. | | `dockerPassword` | `yourDockerPassword`| Password for Oracle SSO account, used to pull the WebLogic Server Docker image, in clear text. | | `dockerUserName` | `yourDockerId` | The same value as `dockerEmail`. | -| `namePrefix` | `0730` | Alphanumeric value used as a disambiguation prefix for several Kubernetes resources. | +| `namePrefix` | `wls` | Alphanumeric value used as a disambiguation prefix for several Kubernetes resources. | If you don't want to change the other parameters, you can use the default values. Please make sure no extra whitespaces are added! @@ -528,7 +521,7 @@ $ ./create-domain-on-aks.sh -i my-create-domain-on-aks-inputs.yaml -o ~/azure -e The script will print the Administration Server address after a successful deployment. The default user name for the Administration Console is `weblogic` and the default password is `welcome1`. Please change this for production deployments. To interact with the cluster using `kubectl`, use `az aks get-credentials` as shown in the script output. -{{% notice info %}} You now have created an AKS cluster with `PersistentVolumeClaim` and `PersistentVolume` to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. +{{% notice info %}} You now have created an AKS cluster with Azure Fils NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. {{% /notice %}} #### Deploy sample application @@ -574,22 +567,27 @@ In the example, the application address is: `http://52.224.248.40:8001/testwebap The test application will list the server host and server IP on the page. -#### Access WebLogic Server logs +#### Validate NFS volume -The logs are stored in the Azure file share. Follow these steps to access the log: +There are several approaches to validate the NFS volume: -1. Go to the [Azure Portal](https://ms.portal.azure.com). -2. Go to your resource group. -3. Open the storage account. -4. In the "File service" section of the left panel, select File shares. -5. Select the file share name (e.g. weblogic in this example). -6. Select logs. -7. Select domain1. -8. WebLogic Server logs are listed in the folder. +- Use Azure Storage bowser, make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) +- Mount the same NFS share in an existing machine, access files from the mounted path. -{{%expand "Click here to view the WebLogic Server logs screenshot." %}} -![WebLogic Server Logs](../screenshot-logs.png) -{{% /expand %}} +We will use `kubectl exec` to enter the admin server pod to check file system status: + +```shell +kubectl exec -it domain1-admin-server -- df -h +``` + +You should find output like the following, with filesystem `${AKS_PERS_STORAGE_ACCOUNT_NAME}.file.core.windows.net:/${AKS_PERS_STORAGE_ACCOUNT_NAME}/${AKS_PERS_SHARE_NAME}`, size `100G`, and mounted on `/shared`: + +```text +Filesystem Size Used Avail Use% Mounted on +... +wlsstorage1612795811.file.core.windows.net:/wlsstorage1612795811/wls-weblogic-1612795811 100G 76M 100G 1% /shared +... +``` #### Clean up resources diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index 6aa2f3d350d..46f3ea9eb4c 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -1,86 +1,147 @@ -#### Create storage and set up file share +#### Create storage Our usage pattern for the operator involves creating Kubernetes "persistent volumes" to allow the WebLogic Server to persist its configuration and data separately from the Kubernetes Pods that run WebLogic Server workloads. We will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). -We will use Azure Files as a Kubernetes volume. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/azure/aks/azure-files-volume). +We will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). -##### Create an Azure Storage account +##### Create an Azure Storage account and NFS share -Create a storage account using the Azure CLI. Note that the storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length: +1. Create an Azure Storage Account -```shell -# Change the value as needed for your own environment -$ export AKS_PERS_STORAGE_ACCOUNT_NAME="${NAME_PREFIX}storage${TIMESTAMP}" - -$ az storage account create \ - -n $AKS_PERS_STORAGE_ACCOUNT_NAME \ - -g $AKS_PERS_RESOURCE_GROUP \ - -l $AKS_PERS_LOCATION \ - --sku Standard_LRS -``` + Create a storage account using the Azure CLI. Make sure the following values must be specified: -Successful output will be a JSON object with the entry `"type": "Microsoft.Storage/storageAccounts"`. + | Option name | Value | Notes | + |-------------------|---------------|-------| + | `name` | `$AKS_PERS_STORAGE_ACCOUNT_NAME` | The storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length. | + | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to)| + | `https-only` | `false` | You can't mount an NFS file share unless you disable secure transfer. | + | `default-action` | `Deny` | For security, we suggest to deny access by default, and choose to allow access from AKS cluster network. | -Now we need to create a file share. To create the file share, you need a storage connection string. Run the `show-connection-string` command to get connection string, then create the share with `az storage share create`, as shown here. + ```shell + # Change the value as needed for your own environment + $ export AKS_PERS_STORAGE_ACCOUNT_NAME="${NAME_PREFIX}storage${TIMESTAMP}" -```shell -# Change value as needed for your own environment -$ export AKS_PERS_SHARE_NAME="${NAME_PREFIX}-weblogic-${TIMESTAMP}" -# Get connection string -$ export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n $AKS_PERS_STORAGE_ACCOUNT_NAME -g $AKS_PERS_RESOURCE_GROUP -o tsv) -# Create file share -$ az storage share create -n $AKS_PERS_SHARE_NAME --connection-string $AZURE_STORAGE_CONNECTION_STRING -``` + $ az storage account create \ + --resource-group $AKS_PERS_RESOURCE_GROUP \ + --name $AKS_PERS_STORAGE_ACCOUNT_NAME \ + --location $AKS_PERS_LOCATION \ + --sku Premium_LRS \ + --kind FileStorage \ + --https-only false \ + --default-action Deny + ``` -Successful output will be exactly the following: + Successful output will be a JSON object with the entry `"type": "Microsoft.Storage/storageAccounts"`. -```shell -{ - "created": true -} -``` +2. Create a NFS share -The operator uses Kubernetes Secrets. We need a storage key for the secret. These commands query the storage account to obtain the key, and then stores the storage account key as a Kubernetes secret. + To create the file share, you must use `NoRootSquash` to allow the operator to change the ownership of the directory in NFS share. -```shell -$ export STORAGE_KEY=$(az storage account keys list --resource-group $AKS_PERS_RESOURCE_GROUP --account-name $AKS_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv) -``` + Otherwise, you will get an error like `chown: changing ownership of '/shared': Operation not permitted`. -Verify the successful output by examining the `STORAGE_KEY` environment variable. It must not be empty. It must be a long ASCII string. + The following command creates a NFS share with 100GiB: -We will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-azure-storage-credentials-secret.sh` script to create the storage account key as a Kubernetes secret, naming the secret with value `${NAME_PREFIX}azure-secret`. Please run: + ```shell + # Change value as needed for your own environment + $ export AKS_PERS_SHARE_NAME="${NAME_PREFIX}-weblogic-${TIMESTAMP}" + # Create NFS file share + $ az storage share-rm create \ + --resource-group $AKS_PERS_RESOURCE_GROUP \ + --storage-account $AKS_PERS_STORAGE_ACCOUNT_NAME \ + --name ${AKS_PERS_SHARE_NAME} \ + --enabled-protocol NFS \ + --root-squash NoRootSquash \ + --quota 100 + ``` -```shell -# Please change persistentVolumeClaimNameSuffix if you changed pre-defined value "regcred" before generating the configuration files. -$ export SECRET_NAME_AZURE_FILE="${NAME_PREFIX}azure-secret" + The command provisions a NFS file share with NFS 4.1 or above. -#cd kubernetes/samples/scripts/create-kubernetes-secrets -$ ./create-azure-storage-credentials-secret.sh -s $SECRET_NAME_AZURE_FILE -a $AKS_PERS_STORAGE_ACCOUNT_NAME -k $STORAGE_KEY -``` +3. Configure network security -You will see the following output: + We have to configure the network security allowing access from AKS cluster to the storage account. -```text -secret/wlsazure-secret created -The secret wlsazure-secret has been successfully created in the default namespace. -``` + Firstly, we have to get the virtual network name and the subnet name of the AKS cluster. + + Run the following commands to get network information: + + ```shell + # get the resource group name of the AKS managed resources + $ aksMCRGName=$(az aks show --name $AKS_CLUSTER_NAME --resource-group $AKS_PERS_RESOURCE_GROUP -o tsv --query "nodeResourceGroup") + $ echo ${aksMCRGName} + + # get network name of AKS cluster + $ aksNetworkName=$(az resource list --resource-group ${aksMCRGName} --resource-type Microsoft.Network/virtualNetworks -o tsv --query '[*].name') + $ echo ${aksNetworkName} + + # get subnet name of AKS agent pool + $ aksSubnetName=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].name") + $ echo ${aksSubnetName} -##### Create PV and PVC + # get subnet id of the AKS agent pool + $ aksSubnetId=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].id") + $ echo ${aksSubnetId} + ``` -This sample uses Kubernetes Persistent Volume Claims (PVC) as storage resource. These features are passed to Kubernetes using YAML files. The script `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh` generates the required configuration files automatically, given an input file containing the parameters. A parameters file is provided at `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml`. Copy and customize this file for your needs. + You must enable the service endpoint `Microsoft.Storage` for the subnet using the following command: -To generate YAML files to create PV and PVC in the AKS cluster, the following values must be substituted in your copy of the input file. + ```shell + $ az network vnet subnet update \ + --resource-group $aksMCRGName \ + --name ${aksSubnetName} \ + --vnet-name ${aksNetworkName} \ + --service-endpoints Microsoft.Storage + ``` + + It takes several minutes to enable the service endpoint; successful output will be a JSON object with string like: + + ```text + "serviceEndpoints": [ + { + "locations": [ + "eastus", + "westus" + ], + "provisioningState": "Succeeded", + "service": "Microsoft.Storage" + } + ``` + + Now we need to create a network rule to allow access from AKS cluster. + The following command enables access from AKS subnet to the storage account: + + ```shell + $ az storage account network-rule add \ + --resource-group $AKS_PERS_RESOURCE_GROUP \ + --account-name $AKS_PERS_STORAGE_ACCOUNT_NAME \ + --subnet ${aksSubnetId} + ``` + + Successful output will be a JSON object with virtual network rule like: + + ```text + "virtualNetworkRules": [ + { + "action": "Allow", + "state": "Succeeded", + "virtualNetworkResourceId": "${aksSubnetId}" + } + ] + ``` + +##### Create Storage Class and PVC + +This sample will dynamically create and use a persistent volume with Azure Files in AKS. These features are passed to Kubernetes using YAML files. + +The script `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh` generates the required configuration files automatically, given an input file containing the parameters. + +A parameters file is provided at `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml`. Copy and customize this file for your needs. + +To generate YAML files to create Storage Class and PVC in the AKS cluster, the following values must be substituted in your copy of the input file. | Name in YAML file | Example value | Notes | |-------------------|---------------|-------| -| `azureServicePrincipalAppId` | `nr086o75-pn59-4782-no5n-nq2op0rsr1q6` | Application ID of your service principal. | -| `azureServicePrincipalClientSecret` | `8693089o-q190-45ps-9319-or36252s3s90` | A client secret of your service principal. | -| `azureServicePrincipalTenantId` | `72s988os-86s1-cafe-babe-2q7pq011qo47` | Tenant (Directory ) ID of your service principal.| -| `dockerEmail` | `yourDockerEmail` | Oracle Single Sign-On (SSO) account email, used to pull the WebLogic Server Docker image. | -| `dockerPassword` | `yourDockerPassword`| Password for Oracle SSO account, used to pull the WebLogic Server Docker image, in clear text. | -| `dockerUserName` | `yourDockerId` | The same value as `dockerEmail`. | | `namePrefix` | `wls` | Alphanumeric value used as a disambiguation prefix for several Kubernetes resources. Make sure the value matches the value of `${NAME_PREFIX}` to keep names in step-by-step commands the same with those in configuration files. | Use the following command to generate configuration files, assuming the output directory is `~/azure`. The script will overwrite any files generated by a previous invocation. @@ -95,12 +156,11 @@ After running the command, all needed configuration files are generated and outp ```shell The following files were generated: - /home/username/azure/weblogic-on-aks/pv.yaml + /home/username/azure/weblogic-on-aks/azure-csi-nfs.yaml /home/username/azure/weblogic-on-aks/pvc.yaml /home/username/azure/weblogic-on-aks/admin-lb.yaml /home/username/azure/weblogic-on-aks/cluster-lb.yaml /home/username/azure/weblogic-on-aks/domain1.yaml - /home/username/azure/weblogic-on-aks/cluster-admin-role.yaml Completed ``` @@ -109,101 +169,54 @@ Completed ##### Apply generated configuration files -In order to mount the file share as a persistent volume, we have provided a configuration file `pv.yaml`. You can find it in your output directory. The following content is an example that uses the value `wls-weblogic` as "shareName", `wlsazure-secret` as "secretName", and the persistent volume name is `wls-azurefile`. +In order to define how an Azure file NFS share is created, we have provided a configuration file `azure-csi-nfs.yaml`. You can find it in your output directory. -We will use the storage class `azurefile`. If you want to create a new class, follow this document [Create a storage class](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv#create-a-storage-class). For more information, see the page [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/en-us/azure/aks/concepts-storage#storage-classes). +The following command output the YAML content of your current settings, should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", +`${AKS_PERS_SHARE_NAME}` as "shareName", and the Storage Class name is `azurefile-csi-nfs`. -```yaml -apiVersion: v1 -kind: PersistentVolume +This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-csi). + +```shell +cat < Date: Fri, 21 Jan 2022 11:19:30 +0800 Subject: [PATCH 02/17] aks guide: fix command format and add a link. Signed-off-by: galiacheng Changes to be committed: modified: documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md modified: documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt --- .../content/samples/azure-kubernetes-service/domain-on-pv.md | 2 +- .../includes/create-aks-cluster-storage.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md index 23e17f622a1..4dac4b8b536 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -572,7 +572,7 @@ The test application will list the server host and server IP on the page. There are several approaches to validate the NFS volume: - Use Azure Storage bowser, make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) -- Mount the same NFS share in an existing machine, access files from the mounted path. +- Mount the same NFS share in an existing virtual machine from Azure, access files from the mounted path, see [Mount Azure NFS file share to Linux](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-mount-nfs-shares). We will use `kubectl exec` to enter the admin server pod to check file system status: diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index 46f3ea9eb4c..ab120f996ed 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -197,7 +197,7 @@ EOF We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` have exactly the same Storage Class name created above. This is required. The following command outputs the YAML content of `pvc.yaml`. -```yaml +```shell cat < Date: Fri, 21 Jan 2022 11:27:49 +0800 Subject: [PATCH 03/17] remove unused screenshot. Signed-off-by: galiacheng Changes to be committed: deleted: documentation/3.3/content/samples/azure-kubernetes-service/screenshot-logs.png --- .../screenshot-logs.png | Bin 145347 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 documentation/3.3/content/samples/azure-kubernetes-service/screenshot-logs.png diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/screenshot-logs.png b/documentation/3.3/content/samples/azure-kubernetes-service/screenshot-logs.png deleted file mode 100644 index f328360091e9436393c6450d46ede4e256437e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145347 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�CFi+2MByZM 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 From c892d4f3ffaed1460b2a40a718a3b78b9272baed Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jan 2022 12:07:26 +0800 Subject: [PATCH 04/17] 3.3 aks doc: update command output Signed-off-by: galiacheng Changes to be committed: modified: documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt --- .../includes/create-aks-cluster-storage.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index ab120f996ed..cfdeb3bcfa5 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -233,7 +233,7 @@ Example output: ```shell $ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE -wls-weblogic-1612795811 Bound pvc-b9c0dfbb-0cee-4362-809e-1621894c5794 100Gi RWX azurefile-csi-nfs 17s +wls-azurefile-1612795811 Bound pvc-b9c0dfbb-0cee-4362-809e-1621894c5794 100Gi RWX azurefile-csi-nfs 17s ``` **Note**: Carefully inspect the output and verify it matches the above. `ACCESS MODES`, `CLAIM`, and `STORAGECLASS` are vital. From e4b3c5363a70acabdbda0512c7b6dd5d90b00a63 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jan 2022 12:08:32 +0800 Subject: [PATCH 05/17] update aks doc with NFS share in the staging folder. Signed-off-by: galiacheng Changes to be committed: modified: documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md modified: documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt deleted: documentation/staging/content/samples/azure-kubernetes-service/screenshot-logs.png --- .../azure-kubernetes-service/domain-on-pv.md | 58 ++-- .../includes/create-aks-cluster-storage.txt | 294 +++++++++--------- .../screenshot-logs.png | Bin 145347 -> 0 bytes 3 files changed, 180 insertions(+), 172 deletions(-) delete mode 100644 documentation/staging/content/samples/azure-kubernetes-service/screenshot-logs.png diff --git a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md index 80057758e90..4dac4b8b536 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -15,7 +15,7 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](/weblogic - [Create WebLogic domain](#create-weblogic-domain) - [Automation](#automation) - [Deploy sample application](#deploy-sample-application) - - [Access WebLogic Server logs](#access-weblogic-server-logs) + - [Validate NFS volume](#validate-nfs-volume) - [Clean up resources](#clean-up-resources) - [Troubleshooting](#troubleshooting) - [Useful links](#useful-links) @@ -26,7 +26,7 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](/weblogic ##### Clone WebLogic Kubernetes Operator repository -Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. We will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.1.1, but should work with the latest release. +Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. We will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.3.7, but should work with the latest release. ```shell $ git clone --branch v{{< latestVersion >}} https://github.com/oracle/weblogic-kubernetes-operator.git @@ -52,17 +52,15 @@ Kubernetes Operators use [Helm](https://helm.sh/) to manage Kubernetes applicati $ helm repo add weblogic-operator https://oracle.github.io/weblogic-kubernetes-operator/charts --force-update ``` ```shell -$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.1.1" +$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" ``` The output will show something similar to the following: ```shell -$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.1.1" -``` -``` +$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" NAME: weblogic-operator -LAST DEPLOYED: Wed Jul 1 23:47:44 2020 +LAST DEPLOYED: Tue Jan 18 17:07:56 2022 NAMESPACE: default STATUS: deployed REVISION: 1 @@ -116,7 +114,7 @@ $ export SECRET_NAME_DOCKER="${NAME_PREFIX}regcred" ``` # cd kubernetes/samples/scripts/create-kubernetes-secrets ``` -```sehll +```shell $ ./create-docker-credentials-secret.sh -s ${SECRET_NAME_DOCKER} -e oracleSsoEmail@bar.com -p oracleSsoPassword -u oracleSsoEmail@bar.com ``` ``` @@ -131,7 +129,6 @@ $ kubectl get secret ``` ``` NAME TYPE DATA AGE -wlsazure-secret Opaque 2 17m regcred kubernetes.io/dockerconfigjson 1 2m25s default-token-csdvd kubernetes.io/service-account-token 3 25m domain1-weblogic-credentials Opaque 2 3m42s @@ -166,10 +163,8 @@ We need to set up the domain configuration for the WebLogic domain. --file-share ${AKS_PERS_SHARE_NAME} \ --storage-account ${AKS_PERS_STORAGE_ACCOUNT_NAME} \ --domain-uid domain1 \ - --pv-name ${NAME_PREFIX}-azurefile-${TIMESTAMP} \ --pvc-name ${NAME_PREFIX}-azurefile-${TIMESTAMP} \ - --secret-docker ${SECRET_NAME_DOCKER} \ - --secret-storage ${SECRET_NAME_AZURE_FILE} + --secret-docker ${SECRET_NAME_DOCKER} ``` You will see output with `PASS` if all the resources are ready. The following is an example of output: @@ -181,10 +176,8 @@ We need to set up the domain configuration for the WebLogic domain. Azure Kubenetes Service instacne: wlsaks1612795811 Azure storage account: wlsstorage1612795811 Azure file share: wls-weblogic-1612795811 - Kubenetes secret for Azure storage: wlsazure-secret Kubenetes secret for Docker Account: regcred Kubenetes secret for Weblogic domain: domain1-weblogic-credentials - Persistent Volume: wls-azurefile-1612795811 Persistent Volume Claim: wls-azurefile-1612795811 ``` @@ -301,7 +294,7 @@ We need to set up the domain configuration for the WebLogic domain. troubleshoot the reason and resolve it before proceeding to the next step. - {{% notice note %}} This sample creates WebLogic Server Pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. To supply different values, edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. + {{% notice note %}} This sample creates WebLogic Server pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). You can supply different values. Edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. {{% /notice%}} Here is an excerpt showing reasonable values: @@ -510,7 +503,7 @@ For input values, you can edit `kubernetes/samples/scripts/create-weblogic-domai | `dockerEmail` | `yourDockerEmail` | Oracle Single Sign-On (SSO) account email, used to pull the WebLogic Server Docker image. | | `dockerPassword` | `yourDockerPassword`| Password for Oracle SSO account, used to pull the WebLogic Server Docker image, in clear text. | | `dockerUserName` | `yourDockerId` | The same value as `dockerEmail`. | -| `namePrefix` | `0730` | Alphanumeric value used as a disambiguation prefix for several Kubernetes resources. | +| `namePrefix` | `wls` | Alphanumeric value used as a disambiguation prefix for several Kubernetes resources. | If you don't want to change the other parameters, you can use the default values. Please make sure no extra whitespaces are added! @@ -528,7 +521,7 @@ $ ./create-domain-on-aks.sh -i my-create-domain-on-aks-inputs.yaml -o ~/azure -e The script will print the Administration Server address after a successful deployment. The default user name for the Administration Console is `weblogic` and the default password is `welcome1`. Please change this for production deployments. To interact with the cluster using `kubectl`, use `az aks get-credentials` as shown in the script output. -{{% notice info %}} You now have created an AKS cluster with `PersistentVolumeClaim` and `PersistentVolume` to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. +{{% notice info %}} You now have created an AKS cluster with Azure Fils NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. {{% /notice %}} #### Deploy sample application @@ -574,22 +567,27 @@ In the example, the application address is: `http://52.224.248.40:8001/testwebap The test application will list the server host and server IP on the page. -#### Access WebLogic Server logs +#### Validate NFS volume -The logs are stored in the Azure file share. Follow these steps to access the log: +There are several approaches to validate the NFS volume: -1. Go to the [Azure Portal](https://ms.portal.azure.com). -2. Go to your resource group. -3. Open the storage account. -4. In the "File service" section of the left panel, select File shares. -5. Select the file share name (e.g. weblogic in this example). -6. Select logs. -7. Select domain1. -8. WebLogic Server logs are listed in the folder. +- Use Azure Storage bowser, make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) +- Mount the same NFS share in an existing virtual machine from Azure, access files from the mounted path, see [Mount Azure NFS file share to Linux](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-mount-nfs-shares). -{{%expand "Click here to view the WebLogic Server logs screenshot." %}} -![WebLogic Server Logs](../screenshot-logs.png) -{{% /expand %}} +We will use `kubectl exec` to enter the admin server pod to check file system status: + +```shell +kubectl exec -it domain1-admin-server -- df -h +``` + +You should find output like the following, with filesystem `${AKS_PERS_STORAGE_ACCOUNT_NAME}.file.core.windows.net:/${AKS_PERS_STORAGE_ACCOUNT_NAME}/${AKS_PERS_SHARE_NAME}`, size `100G`, and mounted on `/shared`: + +```text +Filesystem Size Used Avail Use% Mounted on +... +wlsstorage1612795811.file.core.windows.net:/wlsstorage1612795811/wls-weblogic-1612795811 100G 76M 100G 1% /shared +... +``` #### Clean up resources diff --git a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index 6aa2f3d350d..cfdeb3bcfa5 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -1,86 +1,147 @@ -#### Create storage and set up file share +#### Create storage Our usage pattern for the operator involves creating Kubernetes "persistent volumes" to allow the WebLogic Server to persist its configuration and data separately from the Kubernetes Pods that run WebLogic Server workloads. We will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). -We will use Azure Files as a Kubernetes volume. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/azure/aks/azure-files-volume). +We will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). -##### Create an Azure Storage account +##### Create an Azure Storage account and NFS share -Create a storage account using the Azure CLI. Note that the storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length: +1. Create an Azure Storage Account -```shell -# Change the value as needed for your own environment -$ export AKS_PERS_STORAGE_ACCOUNT_NAME="${NAME_PREFIX}storage${TIMESTAMP}" - -$ az storage account create \ - -n $AKS_PERS_STORAGE_ACCOUNT_NAME \ - -g $AKS_PERS_RESOURCE_GROUP \ - -l $AKS_PERS_LOCATION \ - --sku Standard_LRS -``` + Create a storage account using the Azure CLI. Make sure the following values must be specified: -Successful output will be a JSON object with the entry `"type": "Microsoft.Storage/storageAccounts"`. + | Option name | Value | Notes | + |-------------------|---------------|-------| + | `name` | `$AKS_PERS_STORAGE_ACCOUNT_NAME` | The storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length. | + | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to)| + | `https-only` | `false` | You can't mount an NFS file share unless you disable secure transfer. | + | `default-action` | `Deny` | For security, we suggest to deny access by default, and choose to allow access from AKS cluster network. | -Now we need to create a file share. To create the file share, you need a storage connection string. Run the `show-connection-string` command to get connection string, then create the share with `az storage share create`, as shown here. + ```shell + # Change the value as needed for your own environment + $ export AKS_PERS_STORAGE_ACCOUNT_NAME="${NAME_PREFIX}storage${TIMESTAMP}" -```shell -# Change value as needed for your own environment -$ export AKS_PERS_SHARE_NAME="${NAME_PREFIX}-weblogic-${TIMESTAMP}" -# Get connection string -$ export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n $AKS_PERS_STORAGE_ACCOUNT_NAME -g $AKS_PERS_RESOURCE_GROUP -o tsv) -# Create file share -$ az storage share create -n $AKS_PERS_SHARE_NAME --connection-string $AZURE_STORAGE_CONNECTION_STRING -``` + $ az storage account create \ + --resource-group $AKS_PERS_RESOURCE_GROUP \ + --name $AKS_PERS_STORAGE_ACCOUNT_NAME \ + --location $AKS_PERS_LOCATION \ + --sku Premium_LRS \ + --kind FileStorage \ + --https-only false \ + --default-action Deny + ``` -Successful output will be exactly the following: + Successful output will be a JSON object with the entry `"type": "Microsoft.Storage/storageAccounts"`. -```shell -{ - "created": true -} -``` +2. Create a NFS share -The operator uses Kubernetes Secrets. We need a storage key for the secret. These commands query the storage account to obtain the key, and then stores the storage account key as a Kubernetes secret. + To create the file share, you must use `NoRootSquash` to allow the operator to change the ownership of the directory in NFS share. -```shell -$ export STORAGE_KEY=$(az storage account keys list --resource-group $AKS_PERS_RESOURCE_GROUP --account-name $AKS_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv) -``` + Otherwise, you will get an error like `chown: changing ownership of '/shared': Operation not permitted`. -Verify the successful output by examining the `STORAGE_KEY` environment variable. It must not be empty. It must be a long ASCII string. + The following command creates a NFS share with 100GiB: -We will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-azure-storage-credentials-secret.sh` script to create the storage account key as a Kubernetes secret, naming the secret with value `${NAME_PREFIX}azure-secret`. Please run: + ```shell + # Change value as needed for your own environment + $ export AKS_PERS_SHARE_NAME="${NAME_PREFIX}-weblogic-${TIMESTAMP}" + # Create NFS file share + $ az storage share-rm create \ + --resource-group $AKS_PERS_RESOURCE_GROUP \ + --storage-account $AKS_PERS_STORAGE_ACCOUNT_NAME \ + --name ${AKS_PERS_SHARE_NAME} \ + --enabled-protocol NFS \ + --root-squash NoRootSquash \ + --quota 100 + ``` -```shell -# Please change persistentVolumeClaimNameSuffix if you changed pre-defined value "regcred" before generating the configuration files. -$ export SECRET_NAME_AZURE_FILE="${NAME_PREFIX}azure-secret" + The command provisions a NFS file share with NFS 4.1 or above. -#cd kubernetes/samples/scripts/create-kubernetes-secrets -$ ./create-azure-storage-credentials-secret.sh -s $SECRET_NAME_AZURE_FILE -a $AKS_PERS_STORAGE_ACCOUNT_NAME -k $STORAGE_KEY -``` +3. Configure network security -You will see the following output: + We have to configure the network security allowing access from AKS cluster to the storage account. -```text -secret/wlsazure-secret created -The secret wlsazure-secret has been successfully created in the default namespace. -``` + Firstly, we have to get the virtual network name and the subnet name of the AKS cluster. + + Run the following commands to get network information: + + ```shell + # get the resource group name of the AKS managed resources + $ aksMCRGName=$(az aks show --name $AKS_CLUSTER_NAME --resource-group $AKS_PERS_RESOURCE_GROUP -o tsv --query "nodeResourceGroup") + $ echo ${aksMCRGName} + + # get network name of AKS cluster + $ aksNetworkName=$(az resource list --resource-group ${aksMCRGName} --resource-type Microsoft.Network/virtualNetworks -o tsv --query '[*].name') + $ echo ${aksNetworkName} + + # get subnet name of AKS agent pool + $ aksSubnetName=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].name") + $ echo ${aksSubnetName} -##### Create PV and PVC + # get subnet id of the AKS agent pool + $ aksSubnetId=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].id") + $ echo ${aksSubnetId} + ``` -This sample uses Kubernetes Persistent Volume Claims (PVC) as storage resource. These features are passed to Kubernetes using YAML files. The script `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh` generates the required configuration files automatically, given an input file containing the parameters. A parameters file is provided at `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml`. Copy and customize this file for your needs. + You must enable the service endpoint `Microsoft.Storage` for the subnet using the following command: -To generate YAML files to create PV and PVC in the AKS cluster, the following values must be substituted in your copy of the input file. + ```shell + $ az network vnet subnet update \ + --resource-group $aksMCRGName \ + --name ${aksSubnetName} \ + --vnet-name ${aksNetworkName} \ + --service-endpoints Microsoft.Storage + ``` + + It takes several minutes to enable the service endpoint; successful output will be a JSON object with string like: + + ```text + "serviceEndpoints": [ + { + "locations": [ + "eastus", + "westus" + ], + "provisioningState": "Succeeded", + "service": "Microsoft.Storage" + } + ``` + + Now we need to create a network rule to allow access from AKS cluster. + The following command enables access from AKS subnet to the storage account: + + ```shell + $ az storage account network-rule add \ + --resource-group $AKS_PERS_RESOURCE_GROUP \ + --account-name $AKS_PERS_STORAGE_ACCOUNT_NAME \ + --subnet ${aksSubnetId} + ``` + + Successful output will be a JSON object with virtual network rule like: + + ```text + "virtualNetworkRules": [ + { + "action": "Allow", + "state": "Succeeded", + "virtualNetworkResourceId": "${aksSubnetId}" + } + ] + ``` + +##### Create Storage Class and PVC + +This sample will dynamically create and use a persistent volume with Azure Files in AKS. These features are passed to Kubernetes using YAML files. + +The script `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh` generates the required configuration files automatically, given an input file containing the parameters. + +A parameters file is provided at `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml`. Copy and customize this file for your needs. + +To generate YAML files to create Storage Class and PVC in the AKS cluster, the following values must be substituted in your copy of the input file. | Name in YAML file | Example value | Notes | |-------------------|---------------|-------| -| `azureServicePrincipalAppId` | `nr086o75-pn59-4782-no5n-nq2op0rsr1q6` | Application ID of your service principal. | -| `azureServicePrincipalClientSecret` | `8693089o-q190-45ps-9319-or36252s3s90` | A client secret of your service principal. | -| `azureServicePrincipalTenantId` | `72s988os-86s1-cafe-babe-2q7pq011qo47` | Tenant (Directory ) ID of your service principal.| -| `dockerEmail` | `yourDockerEmail` | Oracle Single Sign-On (SSO) account email, used to pull the WebLogic Server Docker image. | -| `dockerPassword` | `yourDockerPassword`| Password for Oracle SSO account, used to pull the WebLogic Server Docker image, in clear text. | -| `dockerUserName` | `yourDockerId` | The same value as `dockerEmail`. | | `namePrefix` | `wls` | Alphanumeric value used as a disambiguation prefix for several Kubernetes resources. Make sure the value matches the value of `${NAME_PREFIX}` to keep names in step-by-step commands the same with those in configuration files. | Use the following command to generate configuration files, assuming the output directory is `~/azure`. The script will overwrite any files generated by a previous invocation. @@ -95,12 +156,11 @@ After running the command, all needed configuration files are generated and outp ```shell The following files were generated: - /home/username/azure/weblogic-on-aks/pv.yaml + /home/username/azure/weblogic-on-aks/azure-csi-nfs.yaml /home/username/azure/weblogic-on-aks/pvc.yaml /home/username/azure/weblogic-on-aks/admin-lb.yaml /home/username/azure/weblogic-on-aks/cluster-lb.yaml /home/username/azure/weblogic-on-aks/domain1.yaml - /home/username/azure/weblogic-on-aks/cluster-admin-role.yaml Completed ``` @@ -109,101 +169,54 @@ Completed ##### Apply generated configuration files -In order to mount the file share as a persistent volume, we have provided a configuration file `pv.yaml`. You can find it in your output directory. The following content is an example that uses the value `wls-weblogic` as "shareName", `wlsazure-secret` as "secretName", and the persistent volume name is `wls-azurefile`. +In order to define how an Azure file NFS share is created, we have provided a configuration file `azure-csi-nfs.yaml`. You can find it in your output directory. -We will use the storage class `azurefile`. If you want to create a new class, follow this document [Create a storage class](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv#create-a-storage-class). For more information, see the page [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/en-us/azure/aks/concepts-storage#storage-classes). +The following command output the YAML content of your current settings, should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", +`${AKS_PERS_SHARE_NAME}` as "shareName", and the Storage Class name is `azurefile-csi-nfs`. -```yaml -apiVersion: v1 -kind: PersistentVolume +This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-csi). + +```shell +cat <JHwtg6DMcOi@LLo)=)Y`#?D?>g(uyD*8Ke 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�CFi+2MByZM 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 From 908cda2965efb52060a4e664cbbede27adda5d75 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jan 2022 12:24:17 +0800 Subject: [PATCH 06/17] On branch main: update aks sample script with NFS share for storage. Signed-off-by: galiacheng Changes to be committed: modified: kubernetes/samples/scripts/common/utility.sh new file: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-csi-storageaccount-template.yaml deleted: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pv-template.yaml modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pvc-template.yaml modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh --- kubernetes/samples/scripts/common/utility.sh | 19 + .../azure-csi-storageaccount-template.yaml | 16 + .../azure-file-pv-template.yaml | 27 -- .../azure-file-pvc-template.yaml | 5 +- .../create-domain-on-aks-inputs.yaml | 17 +- .../create-domain-on-aks.sh | 347 ++++++++++-------- .../validate.sh | 83 +---- 7 files changed, 237 insertions(+), 277 deletions(-) create mode 100644 kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-csi-storageaccount-template.yaml delete mode 100644 kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pv-template.yaml diff --git a/kubernetes/samples/scripts/common/utility.sh b/kubernetes/samples/scripts/common/utility.sh index 4b98ccd6f6d..2224465b31d 100644 --- a/kubernetes/samples/scripts/common/utility.sh +++ b/kubernetes/samples/scripts/common/utility.sh @@ -185,6 +185,25 @@ checkPvState() { fi } +# +# Check the state of a persistent volume claim. +# $1 - name of volume claim +# $2 - expected state of volume claim +checkPvcState { + + echo "Checking if the persistent volume claim ${1:?} is ${2:?}" + local pvc_state=`kubectl get pvc $1 -o jsonpath='{.status.phase}'` + attempts=0 + while [ ! "$pvc_state" = "$2" ] && [ ! $attempts -eq 10 ]; do + attempts=$((attempts + 1)) + sleep 1 + pvc_state=`kubectl get pvc $1 -o jsonpath='{.status.phase}'` + done + if [ "$pvc_state" != "$2" ]; then + fail "The persistent volume state should be $2 but is $pvc_state" + fi +} + # # Function to check if a persistent volume exists # $1 - name of volume diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-csi-storageaccount-template.yaml b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-csi-storageaccount-template.yaml new file mode 100644 index 00000000000..004d6c89896 --- /dev/null +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-csi-storageaccount-template.yaml @@ -0,0 +1,16 @@ +# Copyright (c) 2018, 2021, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: %STORAGE_CLASS_NAME% +provisioner: file.csi.azure.com +parameters: + protocol: nfs + resourceGroup: %STORAGE_ACCOUNT_RESOURCE_GROUP_NAME% + storageAccount: %STORAGE_ACCOUNT_NAME% + shareName: %AZURE_FILE_SHARE_NAME% +reclaimPolicy: Delete +volumeBindingMode: Immediate +allowVolumeExpansion: true \ No newline at end of file diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pv-template.yaml b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pv-template.yaml deleted file mode 100644 index db1b5dbcf98..00000000000 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pv-template.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) 2018, 2021, Oracle and/or its affiliates. -# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - -apiVersion: v1 -kind: PersistentVolume -metadata: - name: %PERSISTENT_VOLUME_NAME% - labels: - usage: %PERSISTENT_VOLUME_NAME% -spec: - capacity: - storage: 10Gi - accessModes: - - ReadWriteMany - storageClassName: %STORAGE_CLASS_NAME% - persistentVolumeReclaimPolicy: Retain - azureFile: - secretName: %AZURE_FILE_SHARE_SECRET_NAME% - shareName: %AZURE_FILE_SHARE_NAME% - readOnly: false - mountOptions: - - dir_mode=0777 - - file_mode=0777 - - uid=1000 - - gid=1000 - - mfsymlinks - - nobrl diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pvc-template.yaml b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pvc-template.yaml index 75d79d4f5e4..cd5aa6866a3 100644 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pvc-template.yaml +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/azure-file-pvc-template.yaml @@ -11,7 +11,4 @@ spec: storageClassName: %STORAGE_CLASS_NAME% resources: requests: - storage: 10Gi - selector: - matchLabels: - usage: %PERSISTENT_VOLUME_CLAIM_NAME% + storage: 100Gi diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml index f97777e99c2..1ec8bfd7be1 100644 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks-inputs.yaml @@ -53,17 +53,6 @@ azureKubernetesNodeVMSize: Standard_DS2_v2 # The suffix of azure kubernetes node pool name, the azure kubernetes node pool name will be${azureKubernetesNodepoolNamePrefix} ${namePrefix}. azureKubernetesNodepoolNamePrefix: pool1 -# SKU of azure storage account, used to create storage account. -azureStorageAccountSku: Standard_LRS - -# Name of Azure Storage Class. We will use initial StorageClasses azurefile. -# If you want to create new class, follow the document: https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv#create-a-storage-class. -# Go to this page for more details: https://docs.microsoft.com/en-us/azure/aks/concepts-storage#storage-classes -azureStorageClassName: azurefile - -# The suffix of azure storage file share name, the complete value is ${namePrefix}-${azureStorageShareNameSuffix}-, used to create file share, and mount file share. -azureStorageShareNameSuffix: weblogic - #Java Option for WebLogic Server javaOptions: -Dweblogic.StdoutDebugEnabled=false -XX:MinRAMPercentage=25.0 -XX:MaxRAMPercentage=50.0 @@ -72,6 +61,12 @@ javaOptions: -Dweblogic.StdoutDebugEnabled=false -XX:MinRAMPercentage=25.0 -XX:M # Parameter "imagePullSecretName" will be overwritten with this field in kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain-inputs.yaml imagePullSecretNameSuffix: regcred +# Storage class name for Azure Files using Container Storage Interface driver, see https://docs.microsoft.com/en-us/azure/aks/azure-files-csi#nfs-file-shares +azureFileCsiNfsClassName: azurefile-csi-nfs + +# The suffix of azure storage file share name, the complete value is ${namePrefix}-${azureStorageShareNameSuffix}-, used to create file share, and mount file share. +azureStorageShareNameSuffix: weblogic + # Resource request for each server pod (Memory and CPU). This is minimum amount of compute # resources required for each server pod. Edit value(s) below as per pod sizing requirements. # These are optional diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh index 3f9f169de37..ec8f9155e1c 100755 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash -# Copyright (c) 2018, 2022, Oracle and/or its affiliates. +# Copyright (c) 2018, 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Description -# This sample script creates a WebLogic Server domain home on the Azure Kubernetes Service (AKS). -# It creates a new Azure resource group, with a new Azure Storage Account and Azure File Share to allow WebLogic +# This sample script creates a WebLogic Server domain home on the Azure Kubernetes Service (AKS). +# It creates a new Azure resource group, with a new Azure Storage Account and Azure File Share to allow WebLogic # to persist its configuration and data separately from the Kubernetes pods that run WebLogic workloads. -# Besides, it also generates the domain resource yaml files, which can be used to restart the Kubernetes +# Besides, it also generates the domain resource yaml files, which can be used to restart the Kubernetes # artifacts of the corresponding domain. # # The Azure resource deployment is customized by editing @@ -24,7 +24,7 @@ # Initialize script="${BASH_SOURCE[0]}" -scriptDir="$( cd "$( dirname "${script}" )" && pwd )" +scriptDir="$(cd "$(dirname "${script}")" && pwd)" source ${scriptDir}/../common/utility.sh source ${scriptDir}/../common/validate.sh @@ -46,19 +46,26 @@ usage() { executeIt=false while getopts "ehi:o:u:d:" opt; do case $opt in - i) valuesInputFile="${OPTARG}" + i) + valuesInputFile="${OPTARG}" ;; - o) outputDir="${OPTARG}" + o) + outputDir="${OPTARG}" ;; - u) azureResourceUID="${OPTARG}" + u) + azureResourceUID="${OPTARG}" ;; - e) executeIt=true + e) + executeIt=true ;; - d) domainInputFile="${OPTARG}" + d) + domainInputFile="${OPTARG}" ;; - h) usage 0 + h) + usage 0 ;; - *) usage 1 + *) + usage 1 ;; esac done @@ -77,8 +84,8 @@ if [ "${missingRequiredOption}" == "true" ]; then usage 1 fi -if [ -z "${azureResourceUID}" ];then - azureResourceUID=`date +%s` +if [ -z "${azureResourceUID}" ]; then + azureResourceUID=$(date +%s) fi # @@ -96,13 +103,13 @@ fail() { initOutputDir() { aksOutputDir="$outputDir/weblogic-on-aks" - pvOutput="${aksOutputDir}/pv.yaml" + scOutput="${aksOutputDir}/azure-csi-nfs.yaml" pvcOutput="${aksOutputDir}/pvc.yaml" adminLbOutput="${aksOutputDir}/admin-lb.yaml" clusterLbOutput="${aksOutputDir}/cluster-lb.yaml" domain1Output="${aksOutputDir}/domain1.yaml" - removeFileIfExists ${pvOutput} + removeFileIfExists ${scOutput} removeFileIfExists ${pvcOutput} removeFileIfExists ${adminLbOutput} removeFileIfExists ${clusterLbOutput} @@ -130,9 +137,9 @@ initialize() { validationError "You must use the -o option to specify the name of an existing directory to store the generated yaml files in." fi - domainPVInput="${scriptDir}/azure-file-pv-template.yaml" - if [ ! -f ${domainPVInput} ]; then - validationError "The template file ${domainPVInput} for generating a persistent volume was not found" + storageClassInput="${scriptDir}/azure-csi-storageaccount-template.yaml" + if [ ! -f ${storageClassInput} ]; then + validationError "The template file ${storageClassInput} for generating a NFS storage class was not found" fi domainPVCInput="${scriptDir}/azure-file-pvc-template.yaml" @@ -166,7 +173,7 @@ initialize() { export azureStorageShareName="${namePrefix}-${azureStorageShareNameSuffix}-${azureResourceUID}" export imagePullSecretName="${namePrefix}${imagePullSecretNameSuffix}" export persistentVolumeClaimName="${namePrefix}-${persistentVolumeClaimNameSuffix}-${azureResourceUID}" - + export persistentVolumeId="${namePrefix}-${persistentVolumeClaimNameSuffix}-${azureResourceUID}" } # @@ -184,20 +191,20 @@ createYamlFiles() { # (if needed) and copy the inputs file there. copyInputsFileToOutputDirectory ${valuesInputFile} "${aksOutputDir}/create-domain-on-aks-inputs.yaml" - echo Generating ${pvOutput} + echo Generating ${scOutput} - cp ${domainPVInput} ${pvOutput} - sed -i -e "s:%PERSISTENT_VOLUME_NAME%:${persistentVolumeClaimName}:g" ${pvOutput} - sed -i -e "s:%AZURE_FILE_SHARE_SECRET_NAME%:${azureFileShareSecretName}:g" ${pvOutput} - sed -i -e "s:%AZURE_FILE_SHARE_NAME%:${azureStorageShareName}:g" ${pvOutput} - sed -i -e "s:%STORAGE_CLASS_NAME%:${azureStorageClassName}:g" ${pvOutput} + cp ${storageClassInput} ${scOutput} + sed -i -e "s:%STORAGE_CLASS_NAME%:${azureFileCsiNfsClassName}:g" ${scOutput} + sed -i -e "s:%AZURE_FILE_SHARE_NAME%:${azureStorageShareName}:g" ${scOutput} + sed -i -e "s:%STORAGE_ACCOUNT_RESOURCE_GROUP_NAME%:${azureResourceGroupName}:g" ${scOutput} + sed -i -e "s:%STORAGE_ACCOUNT_NAME%:${storageAccountName}:g" ${scOutput} # Generate the yaml to create the persistent volume claim echo Generating ${pvcOutput} cp ${domainPVCInput} ${pvcOutput} sed -i -e "s:%PERSISTENT_VOLUME_CLAIM_NAME%:${persistentVolumeClaimName}:g" ${pvcOutput} - sed -i -e "s:%STORAGE_CLASS_NAME%:${azureStorageClassName}:g" ${pvcOutput} + sed -i -e "s:%STORAGE_CLASS_NAME%:${azureFileCsiNfsClassName}:g" ${pvcOutput} # Generate the yaml to create WebLogic Server domain. echo Generating ${domain1Output} @@ -234,11 +241,11 @@ createYamlFiles() { # javaOptions may contain tokens that are not allowed in export command # we need to handle it differently. # we set the javaOptions variable that can be used later - tmpStr=`grep "javaOptions" ${exportValuesFile}` + tmpStr=$(grep "javaOptions" ${exportValuesFile}) javaOptions=${tmpStr//"javaOptions="/} # We exclude javaOptions from the exportValuesFile - grep -v "javaOptions" ${exportValuesFile} > ${tmpFile} + grep -v "javaOptions" ${exportValuesFile} >${tmpFile} source ${tmpFile} rm ${exportValuesFile} ${tmpFile} @@ -265,142 +272,164 @@ createYamlFiles() { } loginAzure() { - # login with a service principal - az login --service-principal --username $azureServicePrincipalAppId \ - --password $azureServicePrincipalClientSecret \ - --tenant $azureServicePrincipalTenantId - echo Login Azure with Servie Principal successfully. - - if [ $? -ne 0 ]; then - fail "Login to Azure failed!" - fi + # login with a service principal + az login --service-principal --username $azureServicePrincipalAppId \ + --password $azureServicePrincipalClientSecret \ + --tenant $azureServicePrincipalTenantId + echo Login Azure with Servie Principal successfully. + + if [ $? -ne 0 ]; then + fail "Login to Azure failed!" + fi } createResourceGroup() { - # Create a resource group - echo Check if ${azureResourceGroupName} exists - ret=$(az group exists --name ${azureResourceGroupName}) - if [ $ret != false ];then - fail "${azureResourceGroupName} exists, please change value of namePrefix to generate a new resource group name." - fi + # Create a resource group + echo Check if ${azureResourceGroupName} exists + ret=$(az group exists --name ${azureResourceGroupName}) + if [ $ret != false ]; then + fail "${azureResourceGroupName} exists, please change value of namePrefix to generate a new resource group name." + fi - echo Creating Resource Group ${azureResourceGroupName} - az group create --name $azureResourceGroupName --location $azureLocation + echo Creating Resource Group ${azureResourceGroupName} + az group create --name $azureResourceGroupName --location $azureLocation } createAndConnectToAKSCluster() { - # Create aks cluster - echo Check if ${aksClusterName} exists - ret=$(az aks list -g ${azureResourceGroupName} | grep "${aksClusterName}") - if [ -n "$ret" ];then - fail "AKS instance with name ${aksClusterName} exists." - fi + # Create aks cluster + echo Check if ${aksClusterName} exists + ret=$(az aks list -g ${azureResourceGroupName} | grep "${aksClusterName}") + if [ -n "$ret" ]; then + fail "AKS instance with name ${aksClusterName} exists." + fi - echo Creating Azure Kubernetes Service ${aksClusterName} - az aks create --resource-group $azureResourceGroupName \ - --name $aksClusterName \ - --vm-set-type VirtualMachineScaleSets \ - --node-count ${azureKubernetesNodeCount} \ - --generate-ssh-keys \ - --nodepool-name ${azureKubernetesNodepoolName} \ - --node-vm-size ${azureKubernetesNodeVMSize} \ - --location $azureLocation \ - --service-principal $azureServicePrincipalAppId \ - --client-secret $azureServicePrincipalClientSecret - - # Connect to AKS cluster - echo Connencting to Azure Kubernetes Service. - az aks get-credentials --resource-group $azureResourceGroupName --name $aksClusterName + echo Creating Azure Kubernetes Service ${aksClusterName} + az aks create --resource-group $azureResourceGroupName \ + --name $aksClusterName \ + --vm-set-type VirtualMachineScaleSets \ + --node-count ${azureKubernetesNodeCount} \ + --generate-ssh-keys \ + --nodepool-name ${azureKubernetesNodepoolName} \ + --node-vm-size ${azureKubernetesNodeVMSize} \ + --location $azureLocation \ + --service-principal $azureServicePrincipalAppId \ + --client-secret $azureServicePrincipalClientSecret + + # Connect to AKS cluster + echo Connencting to Azure Kubernetes Service. + az aks get-credentials --resource-group $azureResourceGroupName --name $aksClusterName } createFileShare() { - # Create a storage account - echo Check if the storage account ${storageAccountName} exists. - ret=$(az storage account check-name --name ${storageAccountName}) - nameAvailable=$(echo "$ret" | grep "nameAvailable" | grep "false") - if [ -n "$nameAvailable" ];then - echo $ret - fail "Storage account ${aksClusterName} is unavaliable." - fi + # Create a storage account + echo Check if the storage account ${storageAccountName} exists. + ret=$(az storage account check-name --name ${storageAccountName}) + nameAvailable=$(echo "$ret" | grep "nameAvailable" | grep "false") + if [ -n "$nameAvailable" ]; then + echo $ret + fail "Storage account ${aksClusterName} is unavaliable." + fi - echo Creating Azure Storage Account ${storageAccountName}. - az storage account create \ - -n $storageAccountName \ - -g $azureResourceGroupName \ - -l $azureLocation \ - --sku ${azureStorageAccountSku} - - # Export the connection string as an environment variable, this is used when creating the Azure file share - export azureStorageConnectionString=$(az storage account show-connection-string \ - -n $storageAccountName -g $azureResourceGroupName -o tsv) - - # Create the file share - echo Check if file share exists - ret=$( az storage share exists --name ${azureStorageShareName} --account-name ${storageAccountName} --connection-string $azureStorageConnectionString | grep "exists" | grep false) - if [[ "$ret" == "true" ]];then - fail "File share name ${azureStorageShareName} is unavaliable." - fi + echo Creating Azure Storage Account ${storageAccountName}. + az storage account create \ + -n $storageAccountName \ + -g $azureResourceGroupName \ + -l $azureLocation \ + --sku Premium_LRS \ + --kind FileStorage \ + --https-only false \ + --default-action Deny + + echo Creating Azure NFS file share. + az storage share-rm create \ + --resource-group $azureResourceGroupName \ + --storage-account $storageAccountName \ + --name ${azureStorageShareName} \ + --enabled-protocol NFS \ + --root-squash NoRootSquash \ + --quota 100 + + configureStorageAccountNetwork + + # Echo storage account name and key + echo Storage account name: $storageAccountName + echo NFS file share name: ${azureStorageShareName} + + # Mount the file share as a volume + echo Mounting file share as a volume. + kubectl apply -f ${scOutput} + kubectl get storageclass ${azureFileCsiNfsClassName} -o yaml + kubectl apply -f ${pvcOutput} + kubectl get pvc ${persistentVolumeClaimName} -o yaml + + checkPvcState ${persistentVolumeClaimName} "Bound" +} + +configureStorageAccountNetwork() { + # get the resource group name of the AKS managed resources + aksMCRGName=$(az aks show --name $aksClusterName --resource-group $azureResourceGroupName -o tsv --query "nodeResourceGroup") + echo ${aksMCRGName} - echo Creating Azure File Share ${azureStorageShareName}. - az storage share create -n $azureStorageShareName \ - --connection-string $azureStorageConnectionString - - # Get storage account key - azureStorageKey=$(az storage account keys list --resource-group $azureResourceGroupName \ - --account-name $storageAccountName --query "[0].value" -o tsv) - - # Echo storage account name and key - echo Storage account name: $storageAccountName - echo Storage account key: $azureStorageKey - - # Create a Kubernetes secret - echo Creating kubectl secret for Azure File Share ${azureFileShareSecretName}. - bash $dirKubernetesSecrets/create-azure-storage-credentials-secret.sh \ - -s ${azureFileShareSecretName} \ - -a $storageAccountName \ - -k $azureStorageKey - - # Mount the file share as a volume - echo Mounting file share as a volume. - kubectl apply -f ${pvOutput} - kubectl get pv ${persistentVolumeClaimName} -o yaml - kubectl apply -f ${pvcOutput} - kubectl get pvc ${persistentVolumeClaimName} -o yaml + # get network name of AKS cluster + aksNetworkName=$(az resource list --resource-group ${aksMCRGName} --resource-type Microsoft.Network/virtualNetworks -o tsv --query '[*].name') + echo ${aksNetworkName} + + # get subnet name of AKS agent pool + aksSubnetName=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].name") + echo ${aksSubnetName} + + aksSubnetId=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].id") + echo ${aksSubnetId} + + az network vnet subnet update \ + --resource-group $aksMCRGName \ + --name ${aksSubnetName} \ + --vnet-name ${aksNetworkName} \ + --service-endpoints Microsoft.Storage + + az storage account network-rule add \ + --resource-group $azureResourceGroupName \ + --account-name $storageAccountName \ + --subnet ${aksSubnetId} + + if [ $? != 0 ]; then + fail "Fail to configure network for storage account ${storageAccountName}. Network name: ${aksNetworkName}. Subnet name: ${aksSubnetName}." + fi } installWebLogicOperator() { - echo `helm version` - helm repo add weblogic-operator https://oracle.github.io/weblogic-kubernetes-operator/charts - helm repo update - helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.0.0" + echo $(helm version) + helm repo add weblogic-operator https://oracle.github.io/weblogic-kubernetes-operator/charts + helm repo update + helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" } createWebLogicDomain() { - # Create WebLogic Server Domain Credentials. - echo Creating WebLogic Server Domain credentials, with user ${weblogicUserName}, domainUID ${domainUID} - bash ${dirCreateDomainCredentials}/create-weblogic-credentials.sh -u ${weblogicUserName} \ - -p ${weblogicAccountPassword} -d ${domainUID} - - # Create Container Registry Credentials. - bash $dirKubernetesSecrets/create-docker-credentials-secret.sh \ - -e ${docker-email} \ - -p ${dockerPassword} \ - -u ${dockerUserName} \ - -s ${imagePullSecretName} \ - -d container-registry.oracle.com - - # Create WebLogic Server Domain - echo Creating WebLogic Server domain ${domainUID} - bash ${dirCreateDomain}/create-domain.sh -i $domain1Output -o ${outputDir} -e -v - - kubectl apply -f ${adminLbOutput} - kubectl apply -f ${clusterLbOutput} + # Create WebLogic Server Domain Credentials. + echo Creating WebLogic Server Domain credentials, with user ${weblogicUserName}, domainUID ${domainUID} + bash ${dirCreateDomainCredentials}/create-weblogic-credentials.sh -u ${weblogicUserName} \ + -p ${weblogicAccountPassword} -d ${domainUID} + + # Create Container Registry Credentials. + bash $dirKubernetesSecrets/create-docker-credentials-secret.sh \ + -e ${docker-email} \ + -p ${dockerPassword} \ + -u ${dockerUserName} \ + -s ${imagePullSecretName} \ + -d container-registry.oracle.com + + # Create WebLogic Server Domain + echo Creating WebLogic Server domain ${domainUID} + bash ${dirCreateDomain}/create-domain.sh -i $domain1Output -o ${outputDir} -e -v + + kubectl apply -f ${adminLbOutput} + kubectl apply -f ${clusterLbOutput} } waitForJobComplete() { - attempts=0 - svcState="running" - while [ ! "$svcState" == "completed" ] && [ ! $attempts -eq 30 ]; do + attempts=0 + svcState="running" + while [ ! "$svcState" == "completed" ] && [ ! $attempts -eq 30 ]; do svcState="completed" attempts=$((attempts + 1)) echo Waiting for job completed...${attempts} @@ -410,25 +439,25 @@ waitForJobComplete() { # ${domainUID}-${adminServerName}, e.g. domain1-admin-server # ${domainUID}-${adminServerName}-ext, e.g. domain1-admin-server-ext # ${domainUID}-${adminServerName}-external-lb, e.g domain1-admin-server-external-lb - adminServiceCount=`kubectl get svc | grep -c "${domainUID}-${adminServerName}"` + adminServiceCount=$(kubectl get svc | grep -c "${domainUID}-${adminServerName}") if [ ${adminServiceCount} -lt 3 ]; then svcState="running"; fi # If the job is completed, there should have the following services created, .assuming initialManagedServerReplicas=2 # ${domainUID}-${managedServerNameBase}1, e.g. domain1-managed-server1 # ${domainUID}-${managedServerNameBase}2, e.g. domain1-managed-server2 - managedServiceCount=`kubectl get svc | grep -c "${domainUID}-${managedServerNameBase}"` + managedServiceCount=$(kubectl get svc | grep -c "${domainUID}-${managedServerNameBase}") if [ ${managedServiceCount} -lt ${initialManagedServerReplicas} ]; then svcState="running"; fi # If the job is completed, there should have no service in pending status. - pendingCount=`kubectl get svc | grep -c "pending"` + pendingCount=$(kubectl get svc | grep -c "pending") if [ ${pendingCount} -ne 0 ]; then svcState="running"; fi # If the job is completed, there should have the following pods running # ${domainUID}-${adminServerName}, e.g. domain1-admin-server - # ${domainUID}-${managedServerNameBase}1, e.g. domain1-managed-server1 + # ${domainUID}-${managedServerNameBase}1, e.g. domain1-managed-server1 # to # ${domainUID}-${managedServerNameBase}n, e.g. domain1-managed-servern, n = initialManagedServerReplicas - runningPodCount=`kubectl get pods | grep "${domainUID}" | grep -c "Running"` + runningPodCount=$(kubectl get pods | grep "${domainUID}" | grep -c "Running") if [[ $runningPodCount -le ${initialManagedServerReplicas} ]]; then svcState="running"; fi echo ==============================Current Status========================================== @@ -440,8 +469,7 @@ waitForJobComplete() { # If all the services are completed, print service details # Otherwise, ask the user to refer to document for troubleshooting - if [ "$svcState" == "completed" ]; - then + if [ "$svcState" == "completed" ]; then kubectl get pods kubectl get svc else @@ -451,8 +479,11 @@ waitForJobComplete() { printSummary() { if [ "${executeIt}" = true ]; then - regionJsonExcerpt=`az group list --query "[?name=='${azureResourceGroupName}']" | grep location` - tokens=($(IFS='"'; for word in $regionJsonExcerpt; do echo "$word"; done)) + regionJsonExcerpt=$(az group list --query "[?name=='${azureResourceGroupName}']" | grep location) + tokens=($( + IFS='"' + for word in $regionJsonExcerpt; do echo "$word"; done + )) region=${tokens[2]} echo "" echo "" @@ -468,30 +499,30 @@ printSummary() { echo "" if [ "${exposeAdminNodePort}" = true ]; then - adminLbIP=`kubectl get svc ${domainUID}-${adminServerName}-external-lb --output jsonpath='{.status.loadBalancer.ingress[0].ip}'` + adminLbIP=$(kubectl get svc ${domainUID}-${adminServerName}-external-lb --output jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "Administration console access is available at http://${adminLbIP}:${adminPort}/console" fi echo "" - clusterLbIP=`kubectl get svc ${domainUID}-${clusterName}-external-lb --output jsonpath='{.status.loadBalancer.ingress[0].ip}'` + clusterLbIP=$(kubectl get svc ${domainUID}-${clusterName}-external-lb --output jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "Cluster external ip is ${clusterLbIP}, after you deploy application to WebLogic Server cluster, you can access it at http://${clusterLbIP}:${managedServerPort}/" fi echo "" echo "The following files were generated:" - echo " ${pvOutput}" + echo " ${scOutput}" echo " ${pvcOutput}" echo " ${adminLbOutput}" echo " ${clusterLbOutput}" echo " ${domain1Output}" echo "" - + echo "Completed" } cd ${scriptDir} cd .. -export dirSampleScripts=`pwd` +export dirSampleScripts=$(pwd) export dirCreateDomain="${dirSampleScripts}/create-weblogic-domain/domain-home-on-pv" export dirCreateDomainCredentials="${dirSampleScripts}/create-weblogic-domain-credentials" export dirKubernetesSecrets="${dirSampleScripts}/create-kubernetes-secrets" @@ -530,7 +561,7 @@ if [ "${executeIt}" = true ]; then # Create WebLogic Server Domain createWebLogicDomain - + # Wait for all the jobs completed waitForJobComplete fi diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh index 7a83a925fe3..a392f445715 100755 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2018, 2022, Oracle and/or its affiliates. +# Copyright (c) 2018, 2021, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Description @@ -10,9 +10,7 @@ # * Azure storage account: check if it is created # * Azure file share: check if it's created # * Kubernetes secret for container registry account: check if it's created -# * Kubernetes secret for storage account: check if it's created # * Kubernetes secret for WebLogic domain: check if it's created -# * Persistent Volume: check if it's mounted and verify the status and storage class # * Persistent Volume Claim: check if it's mounted and verify the status and storage class # Initialize @@ -27,10 +25,8 @@ usage() { echo " --storage-account [Required] :Storage account name." echo " --domain-uid -d [Required] :Domain UID." - echo " --pv-name [Required] : Persistent Volume name." - echo " --pvc-name [Required] : Persistent Volume Claim name." + echo " --pvc-name [Required] : Persistent Volume Claim name." echo " --secret-docker [Required] : Name of the Kubernetes secret that stores docker account." - echo " --secret-storage [Required] : Name of the Kubernetes secret that stores Azure storage file share credentials." echo " --help -h :Help" exit $1 } @@ -87,16 +83,6 @@ while test $# -gt 0; do fi shift ;; - --pv-name*) - shift - if test $# -gt 0; then - export pvName=$1 - else - echo "Persistent Volume name is required." - exit 1 - fi - shift - ;; --pvc-name*) shift if test $# -gt 0; then @@ -117,16 +103,6 @@ while test $# -gt 0; do fi shift ;; - --secret-storage*) - shift - if test $# -gt 0; then - export secretStorage=$1 - else - echo "Secret name for Storage is required." - exit 1 - fi - shift - ;; -h|--help) usage 0 ;; *) usage 1 @@ -147,10 +123,6 @@ if [ -z ${fileShare} ]; then echo "${script}: --file-share must be specified." missingRequiredOption="true" fi -if [ -z ${pvName} ]; then - echo "${script}: --pv-name must be specified." - missingRequiredOption="true" -fi if [ -z ${pvcName} ]; then echo "${script}: --pvc-name must be specified." missingRequiredOption="true" @@ -163,10 +135,6 @@ if [ -z ${secretDocker} ]; then echo "${script}: --secret-docker must be specified." missingRequiredOption="true" fi -if [ -z ${secretStorage} ]; then - echo "${script}: --secret-storage must be specified." - missingRequiredOption="true" -fi if [ -z ${storageAccount} ]; then echo "${script}: --storage-account must be specified." missingRequiredOption="true" @@ -219,7 +187,7 @@ validateFileShare() { -n $storageAccount -g $resourceGroup -o tsv) echo Check if file share exists - ret=$( az storage share exists --name ${fileShare} --account-name ${storageAccount} --connection-string $azureStorageConnectionString | grep "exists" | grep false) + ret=$( az storage share-rm exists --name ${fileShare} --storage-account ${storageAccount} | grep "exists" | grep false) if [ -n "$ret" ];then fail "File share ${fileShare} is unavailable." fi @@ -239,44 +207,15 @@ validateDockerSecret() { fi } -validateStorageSecret() { - kubectl get secret ${secretStorage} - if [ $? -ne 0 ]; then - fail "Secret:${secretStorage} for storage is not created." - fi -} - validateWebLogicDomainSecret() { ret=$(kubectl get secrets | grep "weblogic-credentials") if [ $? -ne 0 ]; then - fail "Secret:${secretStorage} for storage is not created." + fail "Secret:weblogic-credentials is not created." fi export secretWebLogic=$(echo ${ret%% *}) } -validatePV() { - ret=$(kubectl get pv) - index=0 - for item in ${ret}; - do - index=$((index + 1)) - if [ $index -eq 12 ]; then - if [[ "$item" != "$pvName" ]];then - fail "Persistent Volume name $item does not match value $pvName." - fi - fi - - if [[ $index -eq 16 && "$item" != "Bound" ]]; then - fail "Persistent Volume status is not Bound." - fi - - if [[ $index -eq 18 && "$item" != "azurefile" ]]; then - echo "WARNING" "Storage class $item does not match azurefile, please check." - fi - done -} - validatePVC() { ret=$(kubectl get pvc) index=0 @@ -285,16 +224,12 @@ validatePVC() { index=$((index + 1)) if [ $index -eq 9 ]; then if [[ "$item" != "$pvcName" ]];then - fail "Persistent Volume name $item does not match value $pvcName." + fail "Persistent Volume Claim name $item does not match value $pvcName." fi fi if [[ $index -eq 10 && "$item" != "Bound" ]]; then - fail "Persistent Volume status is not Bound." - fi - - if [[ $index -eq 14 && "$item" != "azurefile" ]]; then - echo "WARNING" "Storage class $item does not match azurefile, please check." + fail "Persistent Volume Claim status is not Bound." fi done } @@ -321,10 +256,8 @@ pass() { echo " Azure Kubernetes Service instance: ${aksName}" echo " Azure storage account: ${storageAccount}" echo " Azure file share: ${fileShare}" - echo " Kubernetes secret for Azure storage: ${secretStorage}" echo " Kubernetes secret for Container Registry Account: ${secretDocker}" echo " Kubernetes secret for WebLogic domain: ${secretWebLogic}" - echo " Persistent Volume: ${pvName}" echo " Persistent Volume Claim: ${pvcName}" } @@ -342,12 +275,8 @@ connectAKS validateDockerSecret -validateStorageSecret - validateWebLogicDomainSecret -validatePV - validatePVC validateOperator From 36f58b5e523c9ae2fe1e3f619c8030e7c5b4bf22 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jan 2022 12:26:25 +0800 Subject: [PATCH 07/17] On branch main: aks sample script: do not specify the operator version. Signed-off-by: galiacheng Changes to be committed: modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh --- kubernetes/samples/scripts/common/utility.sh | 2 +- .../create-domain-on-aks.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes/samples/scripts/common/utility.sh b/kubernetes/samples/scripts/common/utility.sh index 2224465b31d..2894401635c 100644 --- a/kubernetes/samples/scripts/common/utility.sh +++ b/kubernetes/samples/scripts/common/utility.sh @@ -189,7 +189,7 @@ checkPvState() { # Check the state of a persistent volume claim. # $1 - name of volume claim # $2 - expected state of volume claim -checkPvcState { +checkPvcState() { echo "Checking if the persistent volume claim ${1:?} is ${2:?}" local pvc_state=`kubectl get pvc $1 -o jsonpath='{.status.phase}'` diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh index ec8f9155e1c..517c3aff020 100755 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh @@ -401,7 +401,7 @@ installWebLogicOperator() { echo $(helm version) helm repo add weblogic-operator https://oracle.github.io/weblogic-kubernetes-operator/charts helm repo update - helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" + helm install weblogic-operator weblogic-operator/weblogic-operator } createWebLogicDomain() { From 1e88cde8ba2ccad18a3d10fbe3fec0deb1977f63 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jan 2022 13:12:04 +0800 Subject: [PATCH 08/17] aks doc on staging folder: do not specify the operator version. Signed-off-by: galiacheng Changes to be committed: modified: documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md --- .../content/samples/azure-kubernetes-service/domain-on-pv.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md index 4dac4b8b536..2ceaf5975b0 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -52,13 +52,13 @@ Kubernetes Operators use [Helm](https://helm.sh/) to manage Kubernetes applicati $ helm repo add weblogic-operator https://oracle.github.io/weblogic-kubernetes-operator/charts --force-update ``` ```shell -$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" +$ helm install weblogic-operator weblogic-operator/weblogic-operator ``` The output will show something similar to the following: ```shell -$ helm install weblogic-operator weblogic-operator/weblogic-operator --version "3.3.7" +$ helm install weblogic-operator weblogic-operator/weblogic-operator NAME: weblogic-operator LAST DEPLOYED: Tue Jan 18 17:07:56 2022 NAMESPACE: default From 0dbf14d889eca87016b4e201194e2bf54878f321 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jan 2022 13:21:11 +0800 Subject: [PATCH 09/17] fix copyright. Signed-off-by: galiacheng Changes to be committed: modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh modified: kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh --- .../create-domain-on-aks.sh | 2 +- .../validate.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh index 517c3aff020..3aba67c9b08 100755 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2018, 2021, Oracle and/or its affiliates. +# Copyright (c) 2018, 2022, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Description diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh index a392f445715..c1f72ceff73 100755 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/validate.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2018, 2021, Oracle and/or its affiliates. +# Copyright (c) 2018, 2022, Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # # Description From e1827ee7c04d6a5740e4fc37530a3dd36177b8a7 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 25 Jan 2022 10:04:20 +0800 Subject: [PATCH 10/17] applied comments from @rosemarymarano. Signed-off-by: galiacheng Changes to be committed: modified: ../documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md modified: ../documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt modified: ../documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md modified: ../documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt --- .../azure-kubernetes-service/domain-on-pv.md | 25 +++++++-------- .../includes/create-aks-cluster-storage.txt | 32 +++++++++---------- .../azure-kubernetes-service/domain-on-pv.md | 25 +++++++-------- .../includes/create-aks-cluster-storage.txt | 32 +++++++++---------- 4 files changed, 56 insertions(+), 58 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md index 4dac4b8b536..fd7204f3127 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -26,7 +26,7 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](/weblogic ##### Clone WebLogic Kubernetes Operator repository -Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. We will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.3.7, but should work with the latest release. +Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. You will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.3.7, but should work with the latest release. ```shell $ git clone --branch v{{< latestVersion >}} https://github.com/oracle/weblogic-kubernetes-operator.git @@ -85,11 +85,11 @@ weblogic-operator-56654bcdb7-qww7f 1/1 Running 0 - [Create secrets](#create-secrets) - [Create WebLogic Domain](#create-weblogic-domain-1) -Now that we have created the AKS cluster, installed the operator, and verified that the operator is ready to go, we can have the operator create a WLS domain. +Now that You have created the AKS cluster, installed the operator, and verified that the operator is ready to go, you can have the operator create a WLS domain. ##### Create secrets -We will use the `kubernetes/samples/scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh` script to create the domain credentials as a Kubernetes secret. Please run: +You will use the `kubernetes/samples/scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh` script to create the domain credentials as a Kubernetes secret. Please run: ``` # cd kubernetes/samples/scripts/create-weblogic-domain-credentials @@ -102,8 +102,7 @@ secret/domain1-weblogic-credentials created secret/domain1-weblogic-credentials labeled The secret domain1-weblogic-credentials has been successfully created in the default namespace. ``` - -We will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-docker-credentials-secret.sh` script to create the Docker credentials as a Kubernetes secret. Please run: +You will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-docker-credentials-secret.sh` script to create the Docker credentials as a Kubernetes secret. Please run: ```shell # Please change imagePullSecretNameSuffix if you change pre-defined value "regcred" before generating the configuration files. @@ -139,12 +138,12 @@ weblogic-operator-secrets Opaque **Note**: If the `NAME` column in your output is missing any of the values shown above, please reexamine your execution of the preceding steps in this sample to ensure that you correctly followed all of them. The `default-token-mwdj8` shown above will have a different ending in your output. ##### Create WebLogic Domain -We will use the `kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain.sh` script to create the WLS domain in the persistent volume we created previously. +You will use the `kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain.sh` script to create the WLS domain in the persistent volume you created previously. {{% notice note %}} The `create-domain.sh` script and its inputs file are for demonstration purposes _only_; its contents and the domain resource file that it generates for you might change without notice. In production, we strongly recommend that you use the WebLogic Image Tool and WebLogic Deploy Tooling (when applicable), and directly work with domain resource files instead. {{% /notice%}} -We need to set up the domain configuration for the WebLogic domain. +You need to set up the domain configuration for the WebLogic domain. 1. Check if resources are ready. @@ -337,7 +336,7 @@ We need to set up the domain configuration for the WebLogic domain. type: LoadBalancer ``` - Use the sample configuration file `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/domain-on-pv/cluster-lb.yaml` to create a load balancer service for the Managed Servers. If you are choosing not to use the predefined YAML file and instead created new one with customized values, then substitute the following content with you domain values. + Use the sample configuration file `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/domain-on-pv/cluster-lb.yaml` to create a load balancer service for the Managed Servers. If you are choosing not to use the predefined YAML file and instead created new one with customized values, then substitute the following content with your domain values. ```yaml apiVersion: v1 @@ -521,7 +520,7 @@ $ ./create-domain-on-aks.sh -i my-create-domain-on-aks-inputs.yaml -o ~/azure -e The script will print the Administration Server address after a successful deployment. The default user name for the Administration Console is `weblogic` and the default password is `welcome1`. Please change this for production deployments. To interact with the cluster using `kubectl`, use `az aks get-credentials` as shown in the script output. -{{% notice info %}} You now have created an AKS cluster with Azure Fils NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. +{{% notice info %}} You now have created an AKS cluster with Azure Files NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. {{% /notice %}} #### Deploy sample application @@ -571,16 +570,16 @@ The test application will list the server host and server IP on the page. There are several approaches to validate the NFS volume: -- Use Azure Storage bowser, make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) -- Mount the same NFS share in an existing virtual machine from Azure, access files from the mounted path, see [Mount Azure NFS file share to Linux](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-mount-nfs-shares). +- Use Azure Storage browser. Make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) +- Mount the same NFS share in an existing virtual machine from Azure. Access files from the mounted path, see [Mount Azure NFS file share to Linux](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-mount-nfs-shares). -We will use `kubectl exec` to enter the admin server pod to check file system status: +Use `kubectl exec` to enter the admin server pod to check file system status: ```shell kubectl exec -it domain1-admin-server -- df -h ``` -You should find output like the following, with filesystem `${AKS_PERS_STORAGE_ACCOUNT_NAME}.file.core.windows.net:/${AKS_PERS_STORAGE_ACCOUNT_NAME}/${AKS_PERS_SHARE_NAME}`, size `100G`, and mounted on `/shared`: +You will find output like the following, with filesystem `${AKS_PERS_STORAGE_ACCOUNT_NAME}.file.core.windows.net:/${AKS_PERS_STORAGE_ACCOUNT_NAME}/${AKS_PERS_SHARE_NAME}`, size `100G`, and mounted on `/shared`: ```text Filesystem Size Used Avail Use% Mounted on diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index cfdeb3bcfa5..042b16501ad 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -2,22 +2,22 @@ Our usage pattern for the operator involves creating Kubernetes "persistent volumes" to allow the WebLogic Server to persist its configuration and data separately from the Kubernetes Pods that run WebLogic Server workloads. -We will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). +You will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). -We will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). +You will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). ##### Create an Azure Storage account and NFS share -1. Create an Azure Storage Account +1. Create an Azure Storage Account. - Create a storage account using the Azure CLI. Make sure the following values must be specified: + Create a storage account using the Azure CLI. Make sure the following values are specified: | Option name | Value | Notes | |-------------------|---------------|-------| | `name` | `$AKS_PERS_STORAGE_ACCOUNT_NAME` | The storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length. | - | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to)| + | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to).| | `https-only` | `false` | You can't mount an NFS file share unless you disable secure transfer. | - | `default-action` | `Deny` | For security, we suggest to deny access by default, and choose to allow access from AKS cluster network. | + | `default-action` | `Deny` | For security, we suggest that you deny access by default and choose to allow access from the AKS cluster network. | ```shell # Change the value as needed for your own environment @@ -35,13 +35,13 @@ We will dynamically create and use a persistent volume with Azure Files NFS shar Successful output will be a JSON object with the entry `"type": "Microsoft.Storage/storageAccounts"`. -2. Create a NFS share +2. Create an NFS share. - To create the file share, you must use `NoRootSquash` to allow the operator to change the ownership of the directory in NFS share. + To create the file share, you must use `NoRootSquash` to allow the operator to change the ownership of the directory in the NFS share. Otherwise, you will get an error like `chown: changing ownership of '/shared': Operation not permitted`. - The following command creates a NFS share with 100GiB: + The following command creates an NFS share with 100GiB: ```shell # Change value as needed for your own environment @@ -56,13 +56,13 @@ We will dynamically create and use a persistent volume with Azure Files NFS shar --quota 100 ``` - The command provisions a NFS file share with NFS 4.1 or above. + The command provisions an NFS file share with NFS 4.1 or above. -3. Configure network security +3. Configure network security. - We have to configure the network security allowing access from AKS cluster to the storage account. + You must configure the network security allowing access from AKS cluster to the storage account. - Firstly, we have to get the virtual network name and the subnet name of the AKS cluster. + First, you must get the virtual network name and the subnet name of the AKS cluster. Run the following commands to get network information: @@ -108,7 +108,7 @@ We will dynamically create and use a persistent volume with Azure Files NFS shar } ``` - Now we need to create a network rule to allow access from AKS cluster. + Now you must create a network rule to allow access from AKS cluster. The following command enables access from AKS subnet to the storage account: ```shell @@ -171,7 +171,7 @@ Completed In order to define how an Azure file NFS share is created, we have provided a configuration file `azure-csi-nfs.yaml`. You can find it in your output directory. -The following command output the YAML content of your current settings, should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", +The following command displays the YAML content of your current settings. This should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", `${AKS_PERS_SHARE_NAME}` as "shareName", and the Storage Class name is `azurefile-csi-nfs`. This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-csi). @@ -194,7 +194,7 @@ allowVolumeExpansion: true EOF ``` -We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` have exactly the same Storage Class name created above. This is required. +We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file have exactly the same Storage Class name as created previously. This is required. The following command outputs the YAML content of `pvc.yaml`. ```shell diff --git a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md index 2ceaf5975b0..fb098c43646 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -26,7 +26,7 @@ This sample demonstrates how to use the [WebLogic Kubernetes Operator](/weblogic ##### Clone WebLogic Kubernetes Operator repository -Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. We will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.3.7, but should work with the latest release. +Clone the [WebLogic Kubernetes Operator repository](https://github.com/oracle/weblogic-kubernetes-operator) to your machine. You will use several scripts in this repository to create a WebLogic domain. This sample was tested with v3.3.7, but should work with the latest release. ```shell $ git clone --branch v{{< latestVersion >}} https://github.com/oracle/weblogic-kubernetes-operator.git @@ -85,11 +85,11 @@ weblogic-operator-56654bcdb7-qww7f 1/1 Running 0 - [Create secrets](#create-secrets) - [Create WebLogic Domain](#create-weblogic-domain-1) -Now that we have created the AKS cluster, installed the operator, and verified that the operator is ready to go, we can have the operator create a WLS domain. +Now that You have created the AKS cluster, installed the operator, and verified that the operator is ready to go, you can have the operator create a WLS domain. ##### Create secrets -We will use the `kubernetes/samples/scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh` script to create the domain credentials as a Kubernetes secret. Please run: +You will use the `kubernetes/samples/scripts/create-weblogic-domain-credentials/create-weblogic-credentials.sh` script to create the domain credentials as a Kubernetes secret. Please run: ``` # cd kubernetes/samples/scripts/create-weblogic-domain-credentials @@ -102,8 +102,7 @@ secret/domain1-weblogic-credentials created secret/domain1-weblogic-credentials labeled The secret domain1-weblogic-credentials has been successfully created in the default namespace. ``` - -We will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-docker-credentials-secret.sh` script to create the Docker credentials as a Kubernetes secret. Please run: +You will use the `kubernetes/samples/scripts/create-kubernetes-secrets/create-docker-credentials-secret.sh` script to create the Docker credentials as a Kubernetes secret. Please run: ```shell # Please change imagePullSecretNameSuffix if you change pre-defined value "regcred" before generating the configuration files. @@ -139,12 +138,12 @@ weblogic-operator-secrets Opaque **Note**: If the `NAME` column in your output is missing any of the values shown above, please reexamine your execution of the preceding steps in this sample to ensure that you correctly followed all of them. The `default-token-mwdj8` shown above will have a different ending in your output. ##### Create WebLogic Domain -We will use the `kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain.sh` script to create the WLS domain in the persistent volume we created previously. +You will use the `kubernetes/samples/scripts/create-weblogic-domain/domain-home-on-pv/create-domain.sh` script to create the WLS domain in the persistent volume you created previously. {{% notice note %}} The `create-domain.sh` script and its inputs file are for demonstration purposes _only_; its contents and the domain resource file that it generates for you might change without notice. In production, we strongly recommend that you use the WebLogic Image Tool and WebLogic Deploy Tooling (when applicable), and directly work with domain resource files instead. {{% /notice%}} -We need to set up the domain configuration for the WebLogic domain. +You need to set up the domain configuration for the WebLogic domain. 1. Check if resources are ready. @@ -337,7 +336,7 @@ We need to set up the domain configuration for the WebLogic domain. type: LoadBalancer ``` - Use the sample configuration file `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/domain-on-pv/cluster-lb.yaml` to create a load balancer service for the Managed Servers. If you are choosing not to use the predefined YAML file and instead created new one with customized values, then substitute the following content with you domain values. + Use the sample configuration file `kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/domain-on-pv/cluster-lb.yaml` to create a load balancer service for the Managed Servers. If you are choosing not to use the predefined YAML file and instead created new one with customized values, then substitute the following content with your domain values. ```yaml apiVersion: v1 @@ -521,7 +520,7 @@ $ ./create-domain-on-aks.sh -i my-create-domain-on-aks-inputs.yaml -o ~/azure -e The script will print the Administration Server address after a successful deployment. The default user name for the Administration Console is `weblogic` and the default password is `welcome1`. Please change this for production deployments. To interact with the cluster using `kubectl`, use `az aks get-credentials` as shown in the script output. -{{% notice info %}} You now have created an AKS cluster with Azure Fils NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. +{{% notice info %}} You now have created an AKS cluster with Azure Files NFS share to contain the WLS domain configuration files. Using those artifacts, you have used the operator to create a WLS domain. {{% /notice %}} #### Deploy sample application @@ -571,16 +570,16 @@ The test application will list the server host and server IP on the page. There are several approaches to validate the NFS volume: -- Use Azure Storage bowser, make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) -- Mount the same NFS share in an existing virtual machine from Azure, access files from the mounted path, see [Mount Azure NFS file share to Linux](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-mount-nfs-shares). +- Use Azure Storage browser. Make sure you have permission to access the NFS server, see [Azure Storage firewalls and virtual networks document](https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal) +- Mount the same NFS share in an existing virtual machine from Azure. Access files from the mounted path, see [Mount Azure NFS file share to Linux](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-mount-nfs-shares). -We will use `kubectl exec` to enter the admin server pod to check file system status: +Use `kubectl exec` to enter the admin server pod to check file system status: ```shell kubectl exec -it domain1-admin-server -- df -h ``` -You should find output like the following, with filesystem `${AKS_PERS_STORAGE_ACCOUNT_NAME}.file.core.windows.net:/${AKS_PERS_STORAGE_ACCOUNT_NAME}/${AKS_PERS_SHARE_NAME}`, size `100G`, and mounted on `/shared`: +You will find output like the following, with filesystem `${AKS_PERS_STORAGE_ACCOUNT_NAME}.file.core.windows.net:/${AKS_PERS_STORAGE_ACCOUNT_NAME}/${AKS_PERS_SHARE_NAME}`, size `100G`, and mounted on `/shared`: ```text Filesystem Size Used Avail Use% Mounted on diff --git a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index cfdeb3bcfa5..042b16501ad 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -2,22 +2,22 @@ Our usage pattern for the operator involves creating Kubernetes "persistent volumes" to allow the WebLogic Server to persist its configuration and data separately from the Kubernetes Pods that run WebLogic Server workloads. -We will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). +You will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). -We will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). +You will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). ##### Create an Azure Storage account and NFS share -1. Create an Azure Storage Account +1. Create an Azure Storage Account. - Create a storage account using the Azure CLI. Make sure the following values must be specified: + Create a storage account using the Azure CLI. Make sure the following values are specified: | Option name | Value | Notes | |-------------------|---------------|-------| | `name` | `$AKS_PERS_STORAGE_ACCOUNT_NAME` | The storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length. | - | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to)| + | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to).| | `https-only` | `false` | You can't mount an NFS file share unless you disable secure transfer. | - | `default-action` | `Deny` | For security, we suggest to deny access by default, and choose to allow access from AKS cluster network. | + | `default-action` | `Deny` | For security, we suggest that you deny access by default and choose to allow access from the AKS cluster network. | ```shell # Change the value as needed for your own environment @@ -35,13 +35,13 @@ We will dynamically create and use a persistent volume with Azure Files NFS shar Successful output will be a JSON object with the entry `"type": "Microsoft.Storage/storageAccounts"`. -2. Create a NFS share +2. Create an NFS share. - To create the file share, you must use `NoRootSquash` to allow the operator to change the ownership of the directory in NFS share. + To create the file share, you must use `NoRootSquash` to allow the operator to change the ownership of the directory in the NFS share. Otherwise, you will get an error like `chown: changing ownership of '/shared': Operation not permitted`. - The following command creates a NFS share with 100GiB: + The following command creates an NFS share with 100GiB: ```shell # Change value as needed for your own environment @@ -56,13 +56,13 @@ We will dynamically create and use a persistent volume with Azure Files NFS shar --quota 100 ``` - The command provisions a NFS file share with NFS 4.1 or above. + The command provisions an NFS file share with NFS 4.1 or above. -3. Configure network security +3. Configure network security. - We have to configure the network security allowing access from AKS cluster to the storage account. + You must configure the network security allowing access from AKS cluster to the storage account. - Firstly, we have to get the virtual network name and the subnet name of the AKS cluster. + First, you must get the virtual network name and the subnet name of the AKS cluster. Run the following commands to get network information: @@ -108,7 +108,7 @@ We will dynamically create and use a persistent volume with Azure Files NFS shar } ``` - Now we need to create a network rule to allow access from AKS cluster. + Now you must create a network rule to allow access from AKS cluster. The following command enables access from AKS subnet to the storage account: ```shell @@ -171,7 +171,7 @@ Completed In order to define how an Azure file NFS share is created, we have provided a configuration file `azure-csi-nfs.yaml`. You can find it in your output directory. -The following command output the YAML content of your current settings, should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", +The following command displays the YAML content of your current settings. This should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", `${AKS_PERS_SHARE_NAME}` as "shareName", and the Storage Class name is `azurefile-csi-nfs`. This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-csi). @@ -194,7 +194,7 @@ allowVolumeExpansion: true EOF ``` -We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` have exactly the same Storage Class name created above. This is required. +We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file have exactly the same Storage Class name as created previously. This is required. The following command outputs the YAML content of `pvc.yaml`. ```shell From 76590a2d3f4ec68cdf6c17290a1b2217c179d9d6 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 25 Jan 2022 10:36:17 +0800 Subject: [PATCH 11/17] applied comments from @tbarnes-us to scripts. Signed-off-by: galiacheng Changes to be committed: modified: samples/scripts/common/utility.sh modified: samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh --- kubernetes/samples/scripts/common/utility.sh | 5 ++--- .../create-domain-on-aks.sh | 22 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/kubernetes/samples/scripts/common/utility.sh b/kubernetes/samples/scripts/common/utility.sh index 2894401635c..6c9c04273fe 100644 --- a/kubernetes/samples/scripts/common/utility.sh +++ b/kubernetes/samples/scripts/common/utility.sh @@ -192,10 +192,9 @@ checkPvState() { checkPvcState() { echo "Checking if the persistent volume claim ${1:?} is ${2:?}" + local end_secs=$((SECONDS + 30)) local pvc_state=`kubectl get pvc $1 -o jsonpath='{.status.phase}'` - attempts=0 - while [ ! "$pvc_state" = "$2" ] && [ ! $attempts -eq 10 ]; do - attempts=$((attempts + 1)) + while [ ! "$pvc_state" = "$2" ] && [ $SECONDS -le $end_secs ]; do sleep 1 pvc_state=`kubectl get pvc $1 -o jsonpath='{.status.phase}'` done diff --git a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh index 3aba67c9b08..e81e38b4181 100755 --- a/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh +++ b/kubernetes/samples/scripts/create-weblogic-domain-on-azure-kubernetes-service/create-domain-on-aks.sh @@ -327,7 +327,7 @@ createFileShare() { nameAvailable=$(echo "$ret" | grep "nameAvailable" | grep "false") if [ -n "$nameAvailable" ]; then echo $ret - fail "Storage account ${aksClusterName} is unavaliable." + fail "Storage account ${aksClusterName} is unavailable." fi echo Creating Azure Storage Account ${storageAccountName}. @@ -367,18 +367,18 @@ createFileShare() { configureStorageAccountNetwork() { # get the resource group name of the AKS managed resources - aksMCRGName=$(az aks show --name $aksClusterName --resource-group $azureResourceGroupName -o tsv --query "nodeResourceGroup") + local aksMCRGName=$(az aks show --name $aksClusterName --resource-group $azureResourceGroupName -o tsv --query "nodeResourceGroup") echo ${aksMCRGName} # get network name of AKS cluster - aksNetworkName=$(az resource list --resource-group ${aksMCRGName} --resource-type Microsoft.Network/virtualNetworks -o tsv --query '[*].name') + local aksNetworkName=$(az resource list --resource-group ${aksMCRGName} --resource-type Microsoft.Network/virtualNetworks -o tsv --query '[*].name') echo ${aksNetworkName} # get subnet name of AKS agent pool - aksSubnetName=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].name") + local aksSubnetName=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].name") echo ${aksSubnetName} - aksSubnetId=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].id") + local aksSubnetId=$(az network vnet subnet list --resource-group ${aksMCRGName} --vnet-name ${aksNetworkName} -o tsv --query "[*].id") echo ${aksSubnetId} az network vnet subnet update \ @@ -427,8 +427,8 @@ createWebLogicDomain() { } waitForJobComplete() { - attempts=0 - svcState="running" + local attempts=0 + local svcState="running" while [ ! "$svcState" == "completed" ] && [ ! $attempts -eq 30 ]; do svcState="completed" attempts=$((attempts + 1)) @@ -439,17 +439,17 @@ waitForJobComplete() { # ${domainUID}-${adminServerName}, e.g. domain1-admin-server # ${domainUID}-${adminServerName}-ext, e.g. domain1-admin-server-ext # ${domainUID}-${adminServerName}-external-lb, e.g domain1-admin-server-external-lb - adminServiceCount=$(kubectl get svc | grep -c "${domainUID}-${adminServerName}") + local adminServiceCount=$(kubectl get svc | grep -c "${domainUID}-${adminServerName}") if [ ${adminServiceCount} -lt 3 ]; then svcState="running"; fi # If the job is completed, there should have the following services created, .assuming initialManagedServerReplicas=2 # ${domainUID}-${managedServerNameBase}1, e.g. domain1-managed-server1 # ${domainUID}-${managedServerNameBase}2, e.g. domain1-managed-server2 - managedServiceCount=$(kubectl get svc | grep -c "${domainUID}-${managedServerNameBase}") + local managedServiceCount=$(kubectl get svc | grep -c "${domainUID}-${managedServerNameBase}") if [ ${managedServiceCount} -lt ${initialManagedServerReplicas} ]; then svcState="running"; fi # If the job is completed, there should have no service in pending status. - pendingCount=$(kubectl get svc | grep -c "pending") + local pendingCount=$(kubectl get svc | grep -c "pending") if [ ${pendingCount} -ne 0 ]; then svcState="running"; fi # If the job is completed, there should have the following pods running @@ -457,7 +457,7 @@ waitForJobComplete() { # ${domainUID}-${managedServerNameBase}1, e.g. domain1-managed-server1 # to # ${domainUID}-${managedServerNameBase}n, e.g. domain1-managed-servern, n = initialManagedServerReplicas - runningPodCount=$(kubectl get pods | grep "${domainUID}" | grep -c "Running") + local runningPodCount=$(kubectl get pods | grep "${domainUID}" | grep -c "Running") if [[ $runningPodCount -le ${initialManagedServerReplicas} ]]; then svcState="running"; fi echo ==============================Current Status========================================== From 5ca4651cc36ed0b5159c606822ee18d5d6c16609 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 25 Jan 2022 10:53:19 +0800 Subject: [PATCH 12/17] applied new memory notice. Signed-off-by: galiacheng Changes to be committed: modified: ../documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md modified: ../documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md --- .../content/samples/azure-kubernetes-service/domain-on-pv.md | 2 +- .../content/samples/azure-kubernetes-service/domain-on-pv.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md index fd7204f3127..f24a88dda3f 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -293,7 +293,7 @@ You need to set up the domain configuration for the WebLogic domain. troubleshoot the reason and resolve it before proceeding to the next step. - {{% notice note %}} This sample creates WebLogic Server pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). You can supply different values. Edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. + {{% notice note %}} This sample creates WebLogic Server Pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. To supply different values, edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. {{% /notice%}} Here is an excerpt showing reasonable values: diff --git a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md index fb098c43646..c32d615c523 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -293,7 +293,7 @@ You need to set up the domain configuration for the WebLogic domain. troubleshoot the reason and resolve it before proceeding to the next step. - {{% notice note %}} This sample creates WebLogic Server pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). You can supply different values. Edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. + {{% notice note %}} This sample creates WebLogic Server Pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. To supply different values, edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. {{% /notice%}} Here is an excerpt showing reasonable values: From c41fd0beb8b90893a12a0f9eef57e4a2be766738 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 25 Jan 2022 12:17:16 +0800 Subject: [PATCH 13/17] minor update. Signed-off-by: galiacheng Changes to be committed: modified: 3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt modified: staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt --- .../includes/create-aks-cluster-storage.txt | 2 +- .../includes/create-aks-cluster-storage.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index 042b16501ad..d1e030ae110 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -195,7 +195,7 @@ EOF ``` We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file have exactly the same Storage Class name as created previously. This is required. -The following command outputs the YAML content of `pvc.yaml`. +The following command displays the YAML content of `pvc.yaml`. ```shell cat < Date: Tue, 25 Jan 2022 12:31:20 +0800 Subject: [PATCH 14/17] minor update on content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt Signed-off-by: galiacheng Changes to be committed: modified: 3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt modified: staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt --- .../includes/create-aks-cluster-storage.txt | 2 +- .../includes/create-aks-cluster-storage.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index d1e030ae110..6eb64398785 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -194,7 +194,7 @@ allowVolumeExpansion: true EOF ``` -We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file have exactly the same Storage Class name as created previously. This is required. +We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file has exactly the same Storage Class name as created previously. This is required. The following command displays the YAML content of `pvc.yaml`. ```shell diff --git a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index d1e030ae110..6eb64398785 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -194,7 +194,7 @@ allowVolumeExpansion: true EOF ``` -We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file have exactly the same Storage Class name as created previously. This is required. +We have provided another configuration file `pvc.yaml` for the `PersistentVolumeClaim`. The `pvc.yaml` file has exactly the same Storage Class name as created previously. This is required. The following command displays the YAML content of `pvc.yaml`. ```shell From c0e201d67487615983667745300f6e63e766efc3 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 26 Jan 2022 09:52:29 +0800 Subject: [PATCH 15/17] applied comments from @rosemarymarano. Signed-off-by: galiacheng --- .../content/samples/azure-kubernetes-service/domain-on-pv.md | 2 +- .../content/samples/azure-kubernetes-service/domain-on-pv.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md index f24a88dda3f..a7c4f738bff 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/3.3/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -293,7 +293,7 @@ You need to set up the domain configuration for the WebLogic domain. troubleshoot the reason and resolve it before proceeding to the next step. - {{% notice note %}} This sample creates WebLogic Server Pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. To supply different values, edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. + {{% notice note %}} This sample creates WebLogic Server pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. You can supply different values. Edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. {{% /notice%}} Here is an excerpt showing reasonable values: diff --git a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md index c32d615c523..225ecedfcbf 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -293,7 +293,7 @@ You need to set up the domain configuration for the WebLogic domain. troubleshoot the reason and resolve it before proceeding to the next step. - {{% notice note %}} This sample creates WebLogic Server Pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. To supply different values, edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. + {{% notice note %}} This sample creates WebLogic Server pods with reasonable values for memory, CPU, and JVM heap size (as a percentage of memory). These settings were determined by running a skeleton WebLogic domain with minimal or no deployed services and applications on potentially limited or heavily shared container environments. For advice about tuning CPU and memory requests and limits for broader use cases or in a production environment, see the [Pod memory and CPU resources](https://oracle.github.io/weblogic-kubernetes-operator/faq/resource-settings/) FAQ. You can supply different values. Edit `~/azure/weblogic-on-aks/domain1.yaml` and set the desired values for `serverPodMemoryRequest`, `serverPodMemoryLimit`, `serverPodCpuRequest`, `serverPodCpuLimit` and `javaOptions` before running `./create-domain.sh -i ~/azure/weblogic-on-aks/domain1.yaml -o ~/azure -e -v`. {{% /notice%}} Here is an excerpt showing reasonable values: From 2ad80ad77ea689413e86b0fab0008384b0b98f0c Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Wed, 26 Jan 2022 15:02:03 -0500 Subject: [PATCH 16/17] On branch galia-main Remove localization from docs.microsoft.com urls. This allows localized content to be served, where available. modified: documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt Signed-off-by: Ed Burns --- .../includes/create-aks-cluster-storage.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index 6eb64398785..afcf83d9fd5 100644 --- a/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/3.3/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -4,7 +4,7 @@ Our usage pattern for the operator involves creating Kubernetes "persistent volu You will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). -You will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). +You will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/azure/aks/azure-files-dynamic-pv). ##### Create an Azure Storage account and NFS share @@ -15,7 +15,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha | Option name | Value | Notes | |-------------------|---------------|-------| | `name` | `$AKS_PERS_STORAGE_ACCOUNT_NAME` | The storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length. | - | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to).| + | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to)| | `https-only` | `false` | You can't mount an NFS file share unless you disable secure transfer. | | `default-action` | `Deny` | For security, we suggest that you deny access by default and choose to allow access from the AKS cluster network. | @@ -165,7 +165,7 @@ The following files were generated: Completed ``` -**Note:** Beyond the required and default configurations generated by the command, you can modify the generated YAML files to further customize your deployment. For further information about customizing your deployment, consult the operator documentation, [AKS documentation](https://docs.microsoft.com/en-us/azure/aks/), and Kubernetes references. +**Note:** Beyond the required and default configurations generated by the command, you can modify the generated YAML files to further customize your deployment. For further information about customizing your deployment, consult the operator documentation, [AKS documentation](https://docs.microsoft.com/azure/aks/), and Kubernetes references. ##### Apply generated configuration files @@ -174,7 +174,7 @@ In order to define how an Azure file NFS share is created, we have provided a co The following command displays the YAML content of your current settings. This should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", `${AKS_PERS_SHARE_NAME}` as "shareName", and the Storage Class name is `azurefile-csi-nfs`. -This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-csi). +This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/azure/aks/azure-files-csi). ```shell cat < Date: Wed, 26 Jan 2022 15:31:06 -0500 Subject: [PATCH 17/17] On branch galia-main modified: documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md - Fix capitalization. modified: documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt - Do not use localized URLs. Signed-off-by: Ed Burns --- .../samples/azure-kubernetes-service/domain-on-pv.md | 2 +- .../includes/create-aks-cluster-storage.txt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md index 225ecedfcbf..61093867763 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md +++ b/documentation/staging/content/samples/azure-kubernetes-service/domain-on-pv.md @@ -85,7 +85,7 @@ weblogic-operator-56654bcdb7-qww7f 1/1 Running 0 - [Create secrets](#create-secrets) - [Create WebLogic Domain](#create-weblogic-domain-1) -Now that You have created the AKS cluster, installed the operator, and verified that the operator is ready to go, you can have the operator create a WLS domain. +Now that you have created the AKS cluster, installed the operator, and verified that the operator is ready to go, you can have the operator create a WLS domain. ##### Create secrets diff --git a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt index 6eb64398785..00a9e1c0a42 100644 --- a/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt +++ b/documentation/staging/content/samples/azure-kubernetes-service/includes/create-aks-cluster-storage.txt @@ -4,7 +4,7 @@ Our usage pattern for the operator involves creating Kubernetes "persistent volu You will create an external data volume to access and persist data. There are several options for data sharing as described in [Storage options for applications in Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/concepts-storage). -You will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv). +You will dynamically create and use a persistent volume with Azure Files NFS share. For details about this full featured cloud storage solution, see the [Azure Files Documentation](https://docs.microsoft.com/azure/aks/azure-files-dynamic-pv). ##### Create an Azure Storage account and NFS share @@ -15,7 +15,7 @@ You will dynamically create and use a persistent volume with Azure Files NFS sha | Option name | Value | Notes | |-------------------|---------------|-------| | `name` | `$AKS_PERS_STORAGE_ACCOUNT_NAME` | The storage account name can contain only lowercase letters and numbers, and must be between 3 and 24 characters in length. | - | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to).| + | `sku` | `Premium_LRS` | Only `Premium_LRS` and `Premium_ZRS` work for NFS share, see the [Azure Files NFS Share Documentation](https://docs.microsoft.com/azure/storage/files/storage-files-how-to-create-nfs-shares?tabs=azure-portal#applies-to).| | `https-only` | `false` | You can't mount an NFS file share unless you disable secure transfer. | | `default-action` | `Deny` | For security, we suggest that you deny access by default and choose to allow access from the AKS cluster network. | @@ -165,7 +165,7 @@ The following files were generated: Completed ``` -**Note:** Beyond the required and default configurations generated by the command, you can modify the generated YAML files to further customize your deployment. For further information about customizing your deployment, consult the operator documentation, [AKS documentation](https://docs.microsoft.com/en-us/azure/aks/), and Kubernetes references. +**Note:** Beyond the required and default configurations generated by the command, you can modify the generated YAML files to further customize your deployment. For further information about customizing your deployment, consult the operator documentation, [AKS documentation](https://docs.microsoft.com/azure/aks/), and Kubernetes references. ##### Apply generated configuration files @@ -174,7 +174,7 @@ In order to define how an Azure file NFS share is created, we have provided a co The following command displays the YAML content of your current settings. This should be the same with content in `azure-csi-nfs.yaml`; use value `${AKS_PERS_RESOURCE_GROUP}` as "resourceGroup", `${AKS_PERS_STORAGE_ACCOUNT_NAME}` as "storageAccount", `${AKS_PERS_SHARE_NAME}` as "shareName", and the Storage Class name is `azurefile-csi-nfs`. -This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/en-us/azure/aks/azure-files-csi). +This sample uses Azure Files Container Storage Interface (CSI) drivers to manage the NFS file share, provisioner is `file.csi.azure.com`, see the [Azure Files CSI drivers documentation](https://docs.microsoft.com/azure/aks/azure-files-csi). ```shell cat <