Kubernetes代写:DCNE401 Kubernetes

根据提供的Guide, 依次搭建部署OpenStack, Linux VM, Docker, Kubernetes.


Part 1: OpenStack

Step 1

Create a new Virtual Machine named as “StudentName-OS” and your VM should be placed in ‘Lab Final Exam’ folder. Deploy the machine according to the below configs.
OpenStack controller node:

Also, while spinning up VM, choose “Minimal Install”

During CentOS installation, set root password as ‘Dcne123’. Perform entire OpenStack Part of final lab with ‘root’ user.

Step 2

Get the remote console of your VM using Putty and note down the IP addresses of interface ens192.

Note: Convert your DHCP leased IP on the interface to static IP by configuring the interface configuration in CentOS. Interfaces should start on boot.

Step 3

Set your node’s hostname to “initials_of_firstname_&_lastname-OS”

Once you have successfully configured static IP and hostname on controller, reboot the system to activate the changes. Your node should reflect its new hostnames and should have the same IP address which you configured. If not, you may have configured it incorrectly. Resolve the issues, verify and proceed. (Attach snapshots of both the files)

Step 4

Verify Internet connectivity.

If you are unable to get access to internet, verify your configuration and check DNS configuration as well.

Step 5

Enable OpenStack repositories and network-scripts that will be required to install OpenStack packages on a CentOS 8 server.

Step 6

Before installing openstack, make sure to disable the firewall and NetworkManager and Firewall.

Step 7

Add OpenStack Ussuri Repository

Firstly, check what all centos-release-openstack packages are available. Then install Ussuri release repository package.

Once installed, then update all current OS system packages.

Reboot the system after the upgrade is complete.

Step 8

Installing Packstack Installer

Once the system is available after the reboot, install Packstack utility.

Step 9

Generate answer file and edit it

Now, before installing the components, edit “answers” file to set a custom keystone admin password.
Open this file using any editor and make following changes.


Save and exit the file.

Step 10

Run Packstack to Install OpenStack using the configured ‘answers.txt’ file

Run the following command to initiate the OpenStack Deployment using answer file.


# packstack --answer-file /root/answers.txt

Deployment will take around 20 to 30 minutes.

Step 11

Now verify whether IP from ens192 interface is assigned to bridge br-ex, also confirm whether interface ens192 is added as a port in ovs-bridge.

Make note of the file path /root/keystonerc_admin. To perform OpenStack operations, we will source this file. This is our user credentials file.

Step 12

Access Horizon Dashboard

Now try to login to Horizon dashboard. URL is already specified in the above output, in my case URL is

Use the username as “admin” and password as “Dcne123” that we specified in answer file.

Step 13

Before launching an instance in OpenStack, lets source admin credentials


# source keystonerc_admin

Step 14

Now we will create public and private network and then add a router.

  • A. Create private network in admin tenant and add a subnet to it.
  • B. Create Public network and add a subnet to it.
  • C. Create a router, it will connect public and private subnets, set its gateway as pub_network and link pvt_network as well.

Step 15

Now Download Cirros image and then upload it to glance.

Step 16

Also, we will add a security group named “secure” and SSH, ICMP rules to it.

Step 17

Create Private keypair for SSH.

Step 18

Create an instance now and verify it.

Step 19

Now you have to go to Dashboard and verify instance from there.

Once OpenStack Part is completed, Delete the VM, Use: Delete from Disk option

Part 2: Linux

  1. Create a new VM as “your name- Final lab Linux”. Get the IP address of the VM and access the machine using Putty.
  2. Change Hostname of VM to “initials_of_firstname_&_lastname-Linux”. Add a user named “dcne”, set password as “Dcne123”, add it to root group, reboot machine and login with new user credentials. Perform entire Part 2 of final lab with newly created user.
  3. Create a file called file.txt and paste the following.
  4. Which command will you use to print the first 3 lines of ‘file.txt’? How will you print the last 4 lines? Remove line #5 and line #8 without even opening the file.
  5. Create the following directories in new users home directory. Create File1.txt in Folder_1AA, File2.txt in Folder_1ABA, File3.txt in Folder_2A and File4.txt in Folder_2. (Complete the above task using shortcuts).
  6. Edit File1.txt we created in Folder_1AA and paste content - “This data is from File1”. Create a symbolic link in new user’s home directory to File1.txt in Folder_1AA and name it as ‘sym_link’. Read the contents of ‘sym_link’. If we edit the symbolic link file, will it also change the original file? Try it and show the output.
  7. Create two files ‘DCNE1’, ‘DCNE2’, and assign following permissions:
    • DCNE1 - Give r/w/x permissions to owner, r/w to group and others
    • DCNE2 - Give r/w/x to others, r/w to group and r to owner
  8. Create a file named ‘Grep.txt’ in your home directory and paste the following contents of the text file attached. (Use the grep file which you all used in your earlier lab)
  9. How would you use a content of one file as a search string for another file? Create a file named ‘data.txt’ containing the word “data” (which will be your search string) and use it to search word ‘data’ in ‘Grep.txt’ file.
  10. Piping 2 or more commands.
    Execute: ‘grep dcne /etc/passwd’ and then cut the data from column 1,4,7 and show the output in screenshot.
  11. Add a 1 GB partition in the system. After adding new partition, format it. And then mount it permanently using UUID to ‘/finals’ directory. Don’t forget to verify it after reboot. (Show proof of entire operation)
  12. Copy data from “/usr/bin” and paste it to a new directory named “/comp”, check size of “/comp”. Then perform compression on it and save it in a file named as “your-name” with correct extension. Also check the size of an archived file.

Once Linux Part is completed, Delete the VM, Use: Delete from Disk option

Part 3: VMware

  1. What are Port Groups, VMkernel NICs and Physical NICs in ESXi host?
  2. What is vMotion?
  3. Explain what is the difference between Cold Migration and Live Migration?
  4. What is VMware Fault Tolerance?
  5. What is VMware HA?
  6. What is VMware DRS?

Part 4: Ansible

Create a new VM from ubuntu image (use the images as used earlier in labs) Name the VM as “yourname-Ansible”. Power on the VM. Open terminal and login to VM with User ID: “student” and use password as “Dcne123”

  1. Launch a Linux container using ‘ubuntu 18.04’ image and name it as ‘-finals’. Login to the shell and then update and upgrade your container, install ‘nginx’. Then edit the default index file inside container, located at ‘/var/www/html/index.nginx-debian.html’. Make following changes to file.
  2. Restart nginx server and find containers IP address. Then verify webpage you just created by accessing the URL from web browser. (Use your container’s IP)
  3. Exit from container’s shell and take snapshot of your container and name it as ‘-finals-1.0’.
  4. Create 3 more containers using the same ubuntu image and name them as Application1, Application2 and Database. Perform necessary steps in order to ansible-playbook and ansible-adHoc commands work smoothly on all 3 containers.
  5. Edit the default inventory file (/etc/ansible/hosts) of Ansible and add Application1, Application2 container’s IP in a group called ‘application’ and Database containers IP address to a group called ‘database’. Also, add their IPs in the default group ‘webservers’.
  6. Once done, use ansible ad-hoc ping command to ping webservers, application and database separately. You should get success messages.
  7. RUN Ansible ad-hoc command on ‘application’ group which creates user named ‘mustang’ having primary group as root, password as ‘Dcne123’, home directory as ‘/home/mustang’, shell as ‘/bin/bash’ and User id (uid) as 1007.
  8. RUN Ansible ad-hoc command on ‘database’ which installs ‘nginx’ and starts its service.
  9. Create a Playbook named ‘one.yml’ to install nmap, apache2 on ‘application1’ and ‘application2’ containers. It should also install ‘postgresql’ on database container. Paste screenshots of playbook, command and output after running playbook.
  10. Create a playbook named ‘two.yml’ to add three users Sam, Joe, Michelle to ‘application’ group. Use Ansible Loops in this playbook. Run this playbook on both containers from application group in such a way that Playbook will not get executed on both of them at same time, it should run on 2 containers in one after another manner (Use Parallelism in Ansible). Paste screenshots of playbook, various commands used here and their outputs.
  11. Create a playbook named ‘three.yml’ to compress data from database containers ‘/usr/bin’ directory into ‘student’ users (from Ansible host) home directory. Playbook must have Ansible variables for compression format, compression source path and compression file destination defined in separate ‘variable’ file. Paste screenshots of playbook, command used to run it and its output after running the playbook.

Once Ansible Part is completed, Delete the VM, Use: Delete from Disk option

Part 5: Docker Containers

  1. Create a new VM with base image of Ubuntu Get the IP address of the VM and access the machine using Putty. Perform entire Part 5 of final lab with ‘student’ user only. Change Hostname of VM to “initials_of_firstname_&_lastname-Docker”.
  2. Run a “nginx” container and make sure it is in running state all the time.
  3. Deploy a “ubuntu” container with a shell session attached it. Update your container and then do a SSH to your docker host (Ubuntu Desktop Machine) and check the list of all containers present there.
  4. In your ‘student’ users home directory create a folder named “SMU” and navigate to it and create 2 blank files named - Dcnelab1 and Dcnelab2. Then create a “Dockerfile” with following specifications.
  5. Run a container using an image you created in step #4. Now check contents of “/opt/source-code/“ directory of container you created in last step. Do this without getting inside the container.
  6. Get back to ‘student’ users home directory and launch a container based on ‘centos’ image with an interactive terminal attached to it. Once inside the container’s shell, install following packages.
    While creating this container perform necessary steps so that you can access it through internet. Once everything is installed, start the ‘httpd’ service and verify the web page from any browser present on your Windows Laptop or MacBook.
  7. Create a new network named”your-name”using thebridgedriver. Allocate subnet ConfigureGateway Verify bridge network you created.
  8. Run 2 container using ‘centos’ image. Attach them to above created ‘bridge’ network and try to ping one another.
  9. Create a (shared) Docker Volume named “Shared-Volume” and attach it to a new container named ‘Shared1’. Use “centos” image to create it. “Shared1” will store all the data from “/root/student/shared1” directory to “Shared-Volume”. Once you launch the container, get inside the “/root/student/shared1” directory and create a file named “SMU” which should contain - “SMU MustangsPony Up!”.
  10. Create a new container named ‘Shared2’ and attach this container to “Shared-Volume”. Again, use a “centos” image. “Shared2” will store all the data from “/root/student/shared2” directory to “Shared-Volume”. Once you launched the container, get inside the “/root/student/shared2” directory and check if you can see the file created by “Shared1”? If yes, paste the output.

Once Docker Containers Part is completed, Delete the VM, Use: Delete from Disk option

Part 6: Kubernetes

Refer Kubernetes Cluster Setup file attached in Canvas to build K8s cluster. (Another file in Lab exam final)

  1. Create Pod using YAML file that runs the ‘httpd’ web server and verify its operation.
  2. Create a ‘mariadb’ replicaset and name it as ‘mariadb-‘ and list all the replicasets. Then scale the replicaset to 4.
  3. Check all pods present in replicaset and delete any one of them and verify it again.
  4. Create a ‘mysql’ deployment with 2 replicas through YAML file and then verify it.
  5. Create a new namespace named ‘yourname’ through YAML file, then create a new ‘redis’ Pod inside newly created namespace through YAML file.
  6. Delete all the objects (from all namespaces) you created in cluster till now.
  7. Create a ‘httpd’ Deployment with 2 replicas, use selectors - app=httpd and then create a new service named ‘-service’ to access the ‘httpd’ application using the YAML file. Type: NodePort; targetPort: 80; port: 80; nodePort: 30080; selector: app=httpd. Access service created. For that use the IP address of any node followed by the NodePort number.
  8. Now, create a busybox pod using correct image. This will help to query the DNS.
  9. Perform a DNS query of the httpd service and record/observe the DNS name format.
  10. Create a pod named “nginx-manual-“. Check which node is the pod scheduled on. Then delete it.
  11. Make the necessary changes to the pod YAML file created above to schedule the pod on different node (Master Node) as we have only 1 worker node.

Once Kubernetes Part is completed, delete both the VMs, Use: Delete from Disk option