云计算课程实验
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

271 lines
8.5 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. # Assignment 8 指南
  2. ## `******注意,实验结束请立即删除云主机UHost,云盘,负载均衡ULB和容器云UK8S集群,节省费用******`
  3. ## `******注意2,实验未结束且短期内不会继续实验,也请删除上述所有资源。下次实验时重新创建******`
  4. ## 实验内容
  5. - 创建一个K8S集群: `实验步骤 一)`
  6. - 创建一个云主机,并安装kubectl:`实验步骤 二)`
  7. - 在K8S集群上部署一个网页应用:`实验步骤 三)`
  8. - 创建网页应用的多个副本:`实验步骤 四)`
  9. - 启动一个Service对外提供服务:`实验步骤 五)`
  10. ## 实验要求
  11. - 完成所有步骤,并在实验报告([模板下载](file/assignment8/学号-实验八.docx))中完成穿插在本指南中的作业1~作业5)。实验报告转成“学号-实验八.pdf”,并上传至http://113.31.104.68:3389/index.htm
  12. - 实验报告上传deadline: `12月11日`
  13. ## 使用UCloud产品
  14. 云主机UHost、容器云UK8S、私有网络VPC
  15. ## 需要权限
  16. 云主机UHost、镜像库UHub、负载均衡ULB、容器云UK8S、基础网络UNet
  17. ## 基础知识
  18. `K8S理论:` 请参考 https://www.yuque.com/serviceup/cloud-native-talks/k8s-roadmap-primary
  19. `K8S实训:` 更多内容请参考 https://kubernetes.io/docs/tutorials/
  20. ## 实验步骤
  21. ### 一)创建一个K8S集群
  22. #### 1)在产品->容器服务中选择“容器云UK8S”,然后点击“创建集群”。
  23. #### 2)无需更改任何配置,设置管理员密码,付费方式改成“按时”(合计费用应为3.49元),点击立即购买->确认支付。
  24. #### 3)这时候你可以吃早饭或者喝杯 :coffee:,等待5~10分钟
  25. #### 4)当集群状态变成“运行”,说明创建完毕。
  26. <kbd>
  27. <img src="img/assignment8/ass8-cluster.png">
  28. </kbd>
  29. #### 5)让我们看看集群里有些什么。点击“详情”->“集群”,可以看到集群里创建了8个节点(云主机),3个master,5个node。再从控制台进入云主机产品界面,你会发现里面创建了8个云主机,对应的就是集群中的8个节点,每个云主机以“uk8s-”开头命名
  30. ## `**************作业1:请将K8S“集群”页面截图,并插入实验报告***************`
  31. ### 二)创建一个云主机,并安装kubectl(操作kubernetes集群的命令行工具)
  32. #### 1)创建一个1核1G的云主机,绑定弹性IP,按时付费
  33. #### 2)登录云主机,安装kubectl
  34. ```bash
  35. wget https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/linux/amd64/kubectl
  36. chmod +x kubectl
  37. sudo mv kubectl /usr/local/bin/ (root用户:mv kubectl /usr/bin/)
  38. kubectl version -o json
  39. ```
  40. #### 3)如果你看到如下输出说明安装成功
  41. <kbd>
  42. <img src="img/assignment8/ass8-kubeversion.png">
  43. </kbd>
  44. #### 4)将K8S的集群凭证添加到kubectl配置文件中,从而能够操控集群。
  45. > 在概览中查看“外网凭证”,并复制凭证内容。
  46. <kbd>
  47. <img src="img/assignment8/ass8-gailan.png">
  48. </kbd>
  49. <kbd>
  50. <img src="img/assignment8/ass8-pinzheng.png">
  51. </kbd>
  52. > 在云主机中创建~/.kube文件夹,然后创建~/.kube/config文件,并将凭证内容粘贴到该文件中。
  53. #### 5)再次运行`kubectl version -o json`,可以看到除了刚才的client信息,server信息也能打印了。
  54. ## `**************作业2:请将到这一步的kubectl version -o json输出信息页面截图,并插入实验报告***************`
  55. #### 6)尝试几个基本命令
  56. ```bash
  57. kubectl cluster-info //打印集群信息
  58. kubectl get nodes //打印节点信息
  59. kubectl get pods //打印pod信息
  60. kubectl get deployments //打印应用部署信息
  61. kubectl get services //打印service信息
  62. ```
  63. ### 三)在K8S上部署一个应用
  64. #### 1)运行以下命令,部署一个assignment2中的静态网页app
  65. ```bash
  66. kubectl create deployment webapp --image=uhub-edu.service.ucloud.cn/cloud_computing/static_site
  67. ```
  68. > webapp是deployment的名字,可以随意。也就是说,我们创建了一个webapp部署,部署的内容是包含一个静态网页的docker;部署过程中打包了一个pod,包含了该应用
  69. #### 2)用上面提到的基本命令查看应用部署信息和pod信息,得到如下图所示信息
  70. <kbd>
  71. <img src="img/assignment8/ass8-deployment.png">
  72. </kbd>
  73. #### 3)这时我们需要用kubectl创建一个代理,使得从云主机可以访问集群(从而访问pod)。打开一个新的Terminal或者XShell窗口,登录云主机。
  74. ```bash
  75. echo -e "\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n"; kubectl proxy
  76. ```
  77. > 你应该看到“Starting to serve on 127.0.0.1:8001”,表示代理设置成功
  78. #### 4)访问webapp应用(访问pod)
  79. ```bash
  80. export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n}}{{end}}')
  81. echo Name of the Pod: $POD_NAME //如果这一步没有输出,说明$POD_NAME没有获得pod名称,可以把kubectl get pods得到的pod名字直接赋给$POD_NAME。
  82. curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
  83. ```
  84. > 可以看到网页的html输出,说明应用部署成功
  85. ## `**************作业3:请将上面最后一个命令输出的信息截图,并插入实验报告***************`
  86. ### 四)创建多个webapp副本
  87. #### 1)查看pod当前副本信息
  88. ```bash
  89. kubectl get rs
  90. ```
  91. > 可以看到只有一个副本,也就是之前我们手动部署的那个
  92. #### 2)查看pod的详细信息
  93. ```bash
  94. kubectl get pods -o wide
  95. ```
  96. > 可以看到pod部署的NODE的ip信息,正是集群中的一个node。k8s自动选择了这个node进行部署。
  97. <kbd>
  98. <img src="img/assignment8/ass8-1rs.png">
  99. </kbd>
  100. #### 3)现在让我们用一行命令将副本scale到10个,然后再次查看pod详细信息
  101. ```bash
  102. kubectl scale deployments/webapp --replicas=10
  103. kubectl get pods -o wide
  104. ```
  105. > 可以看到此时有10个运行webapp的pod,运行在集群中的4个node节点上(为什么不是5个?答案最后揭晓)
  106. ## `**************作业4:请将上述有10个pod的打印信息截图,并插入实验报告***************`
  107. ### 五)最后,让我们将webapp暴露给公网,从而可以从外部访问页面
  108. #### 1)创建一个负载均衡service,将webapp暴露给外网
  109. ```bash
  110. kubectl expose deployment webapp --type=LoadBalancer --port=80
  111. ```
  112. #### 2)查看当前的service,你可以找到负载均衡服务的外网ip地址
  113. ```bash
  114. kubectl get services
  115. ```
  116. <kbd>
  117. <img src="img/assignment8/ass8-ulb.png">
  118. </kbd>
  119. #### 3)在你自己的电脑上,打开浏览器,访问http://负载均衡服务的外网ip地址
  120. ***************** 关于负载均衡获取不到ip 一直处于pending的暂时解决方案***********
  121. ##### a. 使用 `kubectl get nodes ` 命令获取 `master`节点的ip
  122. #####  <img src="img/assignment8/k8s_master_ip.png">
  123. ##### b. 在当前云主机终端使用`ssh root@ip` 登陆`master`节点
  124. ##### c. 修改 `/etc/kubernetes/yaml/userdata.yaml` 文件的内容,补全密钥信息,密钥信息可以在`ucloud控制台获取`
  125. <kbd> <img src="img/assignment8/ucloud_key.png"></kbd>
  126. > 补充完整的配置文件应该如下所示:
  127. <kbd><img src="img/assignment8/master_yml.png">/kbd>
  128. ##### d. 运行如下命令:
  129. ```bash
  130. kubectl apply -f /etc/kubernetes/yaml/userdata.yaml
  131. ```
  132. <kbd><img src="img/assignment8/apply_config.png"></kbd>
  133. ##### e. 退出当前`master`节点,回退到云主机,稍等片刻,`ip`将会自动分配
  134. ## `**************作业5:请将kubectl get services输出信息截图、并将浏览器地址栏和网页内容一起截图,并插入实验报告***************`
  135. #### 4)删除service,删除所有pod,最后在网页上删除集群,删除云主机(包括K8S没有自动删除的云主机)。
  136. ```bash
  137. kubectl delete service webapp
  138. kubectl delete deployment webapp
  139. ```
  140. > 查看云主机产品中的云盘管理,如果有未删除的云盘,请手动删除
  141. <kbd>
  142. <img src="img/assignment8/ass8-udisk.png">
  143. </kbd>
  144. > 最后在控制台首页点击资源统计,确保除了“私有网络”以外,其他产品分类都显示`当前分类下暂无资源`
  145. <kbd>
  146. <img src="img/assignment8/ass8-resource.png">
  147. </kbd>
  148. <br>
  149. <br>
  150. <br>
  151. #### 5)最后,还有一个答案需要揭晓:我也不知道为啥,留给大家自己探索 :stuck_out_tongue_winking_eye:
  152. #### 6)最后的最后,还有两个消息要送给大家。好消息:这是本学期最后一次作业 :smiley: ;坏消息:期末大作业即将公布 :zap: :zap: