部署Kubernetes Cluster

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

 
安装方法


  • kubernetes 二进制安装 (配置最繁琐,不亚于安装openstack)
  • kubeadm 安装 (谷歌推出的自动化安装工具,网络有要求)
  • minikube 安装 (仅仅用来体验k8s)
  • yum 安装 (最简单,版本比较低====学习推荐此种方法)
  • go编译安装 (最难)
基本环境说明

ip: 192.168.115.149   主机名:node1 
ip: 192.168.115.151   主机名:node2 
ip: 192.168.115.152   主机名:node3 
准备工作

说明:  k8s集群涉及到的3台机器都需要进行准备
1、检查ip和uuid:确保每个节点上 MAC 地址和 product_uuid 的唯一性
2、允许 iptables 检查桥接流量:确保 br_netfilter 模块被加载、iptables 能够正确地查看桥接流量、设置路由
3、关闭系统的selinux、防火墙、Swap
4、修改主机名,添加hosts
5、安装好docker: 注意docker和k8s的版本对应关系,并设置设置cgroup驱动,这里用systemd,否则后续kubeadm init会有相关warning
准备工作



 
 
 yum方式安装部署

(192条消息) k8s搭建部署(超详细)_Anime777的博客-CSDN博客_k8s部署
安装kubeadm,kubelet和kubectl

说明:  k8s集群涉及到的3台机器都需要进行准备
  1. #添加k8s阿里云YUM软件源
  2. vim /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  6. enabled=1
  7. gpgcheck=0
  8. repo_gpgcheck=0
  9. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10. #安装kubeadm,kubelet和kubectl,注意和docker版本对应
  11. yum install -y kubelet-1.21.1 kubeadm-1.21.1 kubectl-1.21.1
  12. #启动,注意master节点
  13. systemctl start kubelet
  14. systemctl enable kubelet
  15. systemctl status kubelet
复制代码
集群部署

说明: 主要是对master节点初始化和node节点的接入
  1. #master节点部署初始化master节点
  2. kubeadm init   --apiserver-advertise-address=192.168.115.149 --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.21.1   --service-cidr=10.140.0.0/16 --pod-network-cidr=10.240.0.0/16<br>
复制代码
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
  #node节点部署,根据kubeadm init执行成功生成的命令复制到node节点执行
   kubeadm join 192.168.115.149:6443 --token swshsb.7yu37gx1929902tl \
  1.     --discovery-token-ca-cert-hash sha256:626728b1a039991528a031995ed6ec8069382b489c8ae1e61286f96fcd9a3bfc<br>#node节点加入后,可在master节点进行查看节点加入情况<br>kubectl get nodes<br>集群部署后查看集群状态的话还不是ready的状态,所以需要安装网络插件来完成k8s的集群创建的最后一步<br>
复制代码




 
安装网络插件

说明:master节点安装,可安装flannel插件也可安装安装calico插件,此处安装flannel插件
  1.   1 vim kube-flannel.yml
  2.   2 ---
  3.   3 apiVersion: policy/v1beta1
  4.   4 kind: PodSecurityPolicy
  5.   5 metadata:
  6.   6   name: psp.flannel.unprivileged
  7.   7   annotations:
  8.   8     seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
  9.   9     seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
  10. 10     apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
  11. 11     apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
  12. 12 spec:
  13. 13   privileged: false
  14. 14   volumes:
  15. 15   - configMap
  16. 16   - secret
  17. 17   - emptyDir
  18. 18   - hostPath
  19. 19   allowedHostPaths:
  20. 20   - pathPrefix: "/etc/cni/net.d"
  21. 21   - pathPrefix: "/etc/kube-flannel"
  22. 22   - pathPrefix: "/run/flannel"
  23. 23   readOnlyRootFilesystem: false
  24. 24   runAsUser:
  25. 25     rule: RunAsAny
  26. 26   supplementalGroups:
  27. 27     rule: RunAsAny
  28. 28   fsGroup:
  29. 29     rule: RunAsAny
  30. 30   allowPrivilegeEscalation: false
  31. 31   defaultAllowPrivilegeEscalation: false
  32. 32   allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
  33. 33   defaultAddCapabilities: []
  34. 34   requiredDropCapabilities: []
  35. 35   hostPID: false
  36. 36   hostIPC: false
  37. 37   hostNetwork: true
  38. 38   hostPorts:
  39. 39   - min: 0
  40. 40     max: 65535
  41. 41   seLinux:
  42. 42     rule: 'RunAsAny'
  43. 43 ---
  44. 44 kind: ClusterRole
  45. 45 apiVersion: rbac.authorization.k8s.io/v1
  46. 46 metadata:
  47. 47   name: flannel
  48. 48 rules:
  49. 49 - apiGroups: ['extensions']
  50. 50   resources: ['podsecuritypolicies']
  51. 51   verbs: ['use']
  52. 52   resourceNames: ['psp.flannel.unprivileged']
  53. 53 - apiGroups:
  54. 54   - ""
  55. 55   resources:
  56. 56   - pods
  57. 57   verbs:
  58. 58   - get
  59. 59 - apiGroups:
  60. 60   - ""
  61. 61   resources:
  62. 62   - nodes
  63. 63   verbs:
  64. 64   - list
  65. 65   - watch
  66. 66 - apiGroups:
  67. 67   - ""
  68. 68   resources:
  69. 69   - nodes/status
  70. 70   verbs:
  71. 71   - patch
  72. 72 ---
  73. 73 kind: ClusterRoleBinding
  74. 74 apiVersion: rbac.authorization.k8s.io/v1
  75. 75 metadata:
  76. 76   name: flannel
  77. 77 roleRef:
  78. 78   apiGroup: rbac.authorization.k8s.io
  79. 79   kind: ClusterRole
  80. 80   name: flannel
  81. 81 subjects:
  82. 82 - kind: ServiceAccount
  83. 83   name: flannel
  84. 84   namespace: kube-system
  85. 85 ---
  86. 86 apiVersion: v1
  87. 87 kind: ServiceAccount
  88. 88 metadata:
  89. 89   name: flannel
  90. 90   namespace: kube-system
  91. 91 ---
  92. 92 kind: ConfigMap
  93. 93 apiVersion: v1
  94. 94 metadata:
  95. 95   name: kube-flannel-cfg
  96. 96   namespace: kube-system
  97. 97   labels:
  98. 98     tier: node
  99. 99     app: flannel
  100. 100 data:
  101. 101   cni-conf.json: |
  102. 102     {
  103. 103       "name": "cbr0",
  104. 104       "cniVersion": "0.3.1",
  105. 105       "plugins": [
  106. 106         {
  107. 107           "type": "flannel",
  108. 108           "delegate": {
  109. 109             "hairpinMode": true,
  110. 110             "isDefaultGateway": true
  111. 111           }
  112. 112         },
  113. 113         {
  114. 114           "type": "portmap",
  115. 115           "capabilities": {
  116. 116             "portMappings": true
  117. 117           }
  118. 118         }
  119. 119       ]
  120. 120     }
  121. 121   net-conf.json: |
  122. 122     {
  123. 123       "Network": "10.244.0.0/16",
  124. 124       "Backend": {
  125. 125         "Type": "vxlan"
  126. 126       }
  127. 127     }
  128. 128 ---
  129. 129 apiVersion: apps/v1
  130. 130 kind: DaemonSet
  131. 131 metadata:
  132. 132   name: kube-flannel-ds
  133. 133   namespace: kube-system
  134. 134   labels:
  135. 135     tier: node
  136. 136     app: flannel
  137. 137 spec:
  138. 138   selector:
  139. 139     matchLabels:
  140. 140       app: flannel
  141. 141   template:
  142. 142     metadata:
  143. 143       labels:
  144. 144         tier: node
  145. 145         app: flannel
  146. 146     spec:
  147. 147       affinity:
  148. 148         nodeAffinity:
  149. 149           requiredDuringSchedulingIgnoredDuringExecution:
  150. 150             nodeSelectorTerms:
  151. 151             - matchExpressions:
  152. 152               - key: kubernetes.io/os
  153. 153                 operator: In
  154. 154                 values:
  155. 155                 - linux
  156. 156       hostNetwork: true
  157. 157       priorityClassName: system-node-critical
  158. 158       tolerations:
  159. 159       - operator: Exists
  160. 160         effect: NoSchedule
  161. 161       serviceAccountName: flannel
  162. 162       initContainers:
  163. 163       - name: install-cni-plugin
  164. 164         image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
  165. 165         command:
  166. 166         - cp
  167. 167         args:
  168. 168         - -f
  169. 169         - /flannel
  170. 170         - /opt/cni/bin/flannel
  171. 171         volumeMounts:
  172. 172         - name: cni-plugin
  173. 173           mountPath: /opt/cni/bin
  174. 174       - name: install-cni
  175. 175         image: rancher/mirrored-flannelcni-flannel:v0.18.1
  176. 176         command:
  177. 177         - cp
  178. 178         args:
  179. 179         - -f
  180. 180         - /etc/kube-flannel/cni-conf.json
  181. 181         - /etc/cni/net.d/10-flannel.conflist
  182. 182         volumeMounts:
  183. 183         - name: cni
  184. 184           mountPath: /etc/cni/net.d
  185. 185         - name: flannel-cfg
  186. 186           mountPath: /etc/kube-flannel/
  187. 187       containers:
  188. 188       - name: kube-flannel
  189. 189         image: rancher/mirrored-flannelcni-flannel:v0.18.1
  190. 190         command:
  191. 191         - /opt/bin/flanneld
  192. 192         args:
  193. 193         - --ip-masq
  194. 194         - --kube-subnet-mgr
  195. 195         resources:
  196. 196           requests:
  197. 197             cpu: "100m"
  198. 198             memory: "50Mi"
  199. 199           limits:
  200. 200             cpu: "100m"
  201. 201             memory: "50Mi"
  202. 202         securityContext:
  203. 203           privileged: false
  204. 204           capabilities:
  205. 205             add: ["NET_ADMIN", "NET_RAW"]
  206. 206         env:
  207. 207         - name: POD_NAME
  208. 208           valueFrom:
  209. 209             fieldRef:
  210. 210               fieldPath: metadata.name
  211. 211         - name: POD_NAMESPACE
  212. 212           valueFrom:
  213. 213             fieldRef:
  214. 214               fieldPath: metadata.namespace
  215. 215         - name: EVENT_QUEUE_DEPTH
  216. 216           value: "5000"
  217. 217         volumeMounts:
  218. 218         - name: run
  219. 219           mountPath: /run/flannel
  220. 220         - name: flannel-cfg
  221. 221           mountPath: /etc/kube-flannel/
  222. 222         - name: xtables-lock
  223. 223           mountPath: /run/xtables.lock
  224. 224       volumes:
  225. 225       - name: run
  226. 226         hostPath:
  227. 227           path: /run/flannel
  228. 228       - name: cni-plugin
  229. 229         hostPath:
  230. 230           path: /opt/cni/bin
  231. 231       - name: cni
  232. 232         hostPath:
  233. 233           path: /etc/cni/net.d
  234. 234       - name: flannel-cfg
  235. 235         configMap:
  236. 236           name: kube-flannel-cfg
  237. 237       - name: xtables-lock
  238. 238         hostPath:
  239. 239           path: /run/xtables.lock
  240. 240           type: FileOrCreate
复制代码
vim kube-flannel.yml
  1. #修改net-conf.json
  2. 下面的网段为上面初始化master pod-network-cidr的网段地址
  3. sed -i 's/10.244.0.0/10.240.0.0/' kube-flannel.yml
  4. #执行
  5. kubectl apply -f kube-flannel.yml
  6. #执行查看安装的状态
  7. kubectl get pods --all-namespaces
  8. #查看集群的状态是否为ready
  9. kubectl get nodes<br><br>===补充卸载flannel================<br>
复制代码
1、在master节点,找到flannel路径,删除flannel
kubectl delete -f kube-flannel.yml
2、在node节点清理flannel网络留下的文件
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
执行完上面的操作,重启kubelet


测试kubernetes集群

说明:创建一个pod,开放对外端口访问,这里会随机映射一个端口,不指定ns,会默认创建在default下
  1. kubectl create deployment nginx --image=nginx
  2. kubectl expose deployment nginx --port=80 --type=NodePort
复制代码


 
问题总结

 master节点启动kubelet异常

查看kubelet状态有如下报错属正常现象,正常进行master初始化即可

master初始化问题处理

执行kubeadm init   --apiserver-advertise-address=192.168.115.149  --kubernetes-version v1.21.1   --service-cidr=10.140.0.0/16 --pod-network-cidr=10.240.0.0/16 
报错如下:

 原因分析:由于国内网络原因,kubeadm init会卡住不动,一卡就是很长时间,然后报出这种问题,kubeadm init未设置镜像地址,就默认下载k8s.gcr.io的docker镜像,但是国内连不上https://k8s.gcr.io/v2/
 解决方案:kubeadm init添加镜像地址,执行kubeadm init   --apiserver-advertise-address=192.168.115.149 --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.21.1   --service-cidr=10.140.0.0/16 --pod-network-cidr=10.240.0.0/16
报错如下:

 原因分析:拉取 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0镜像失败
解决方案:可查询需要下载的镜像,手动拉取镜像修改tag
#查询需要下载的镜像  kubeadm config images list
#查询镜像 docker images
发现已经有coredns:v1.8.0镜像但是tag不一样,修改
docker tag registry.aliyuncs.com/google_containers/coredns:v1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 
再次执行kubeadm init   --apiserver-advertise-address=192.168.115.149 --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.21.1   --service-cidr=10.140.0.0/16 --pod-network-cidr=10.240.0.0/16
成功!!!!!



master初始化成功记录

 master初始化成功记录 kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [ksoftirqd/1:14] 


大量高负载程序,造成cpu soft lockup。
Soft lockup就是内核软死锁,这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。
https://blog.csdn.net/qq_44710568/article/details/104843432
https://blog.csdn.net/JAVA_LuZiMaKei/article/details/120140987

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表