• 02. Kubeadm部署Kubernetes集群


    目录

    1、前言

    2、Kubernetes部署方式

    3、kubeadmin部署

    3.1、关闭防火墙

    3.2、配置阿里云Kubernetes源

    3.3、安装kubeadm,kubelet,kubectl

    3.4、初始化master节点

    3.5、master节点配置kubectl命令行工具

    3.6、master节点下载flannel网络配置文件

    3.7、node1和node2节点加入Kubernetes集群

    3.8、查看节点信息


    1、前言

    Kubernetes本身不提供容器引擎,因此在部署之前需要先安装好Docker环境。

    2、Kubernetes部署方式

    Kubernetes的部署方式有:

    • kubeadmin方式
    • yum方式
    • 二进制包方式
    • minikubei工具方式

    今天我们先介绍最常用的kubeadm方式。

    3、kubeadmin部署

    为了方便我们测试,先对三个节点分别配置host:

    1. 192.168.74.129 master
    2. 192.168.74.130 node1
    3. 192.168.74.131 node2

    3.1、关闭防火墙

    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. # 同时关闭Swap
    4. swapoff -a
    5. # 永久禁用
    6. sed -i 's/enforcing/disabled/' /etc/selinux/config
    7. setenforce 0

    3.2、配置阿里云Kubernetes源

    在master节点上,配置阿里云Kubernetes源,方便下载。

    1. [root@192 ~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF
    2. > [kubernetes]
    3. > name=Kubernetes
    4. > baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    5. > enabled=1
    6. > gpgkeycheck=0
    7. > repo_gpgcheck=0
    8. > gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    9. https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    10. > EOF

    接着利用scp命令复制到node1和node2节点:

    1. scp /etc/yum.repos.d/kubernetes.repo node1:/etc/yum.repos.d/
    2. scp /etc/yum.repos.d/kubernetes.repo node2:/etc/yum.repos.d/

    3.3、安装kubeadm,kubelet,kubectl

    在master,node1,node2节点上分别安装kubeadm,kubelet,kubectl。

    1. # 不指定版本号,则安装最新版本
    2. yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0

    安装完成后,启动kubelet:

    1. systemctl start kubectl
    2. systemctl enable kubectl

    3.4、初始化master节点

    kubeadm init --apiserver-advertise-address=192.168.74.129 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --service-cidr=10.168.0.0/12 --pod-network-cidr=10.244.0.0/16  --ignore-preflight-errors=all
    

    这里很容易出错,要有耐心。当初始化失败时,可以使用kubeadm reset重置。

    当控制台有如下输出时,就说明初始化成功。

    其中内容:

    1. kubeadm join 192.168.74.129:6443 --token zhb1rz.qyi4ld37t0py180b \
    2. --discovery-token-ca-cert-hash sha256:54f2619a2931211bf21e8f4e0cf1dda00d1bad9331f654e21155ce6b0c331005

    就是node节点加入集群的命令。

    3.5、master节点配置kubectl命令行工具

    1. mkdir -p $HOME/.kube
    2. cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    3. chown $(id -u):$(id -g) $HOME/.kube/config

    3.6、master节点下载flannel网络配置文件

    Flannel是一个开源的网络管理工具,用于在容器集群中提供网络通信。它可以帮助在不同主机上运行的容器互相通信,并确保容器间的网络隔离。Flannel的工作原理是通过创建 overlay 网络来连接容器。它使用虚拟网络 TUN/TAP 设备将容器网络流量封装到二层网络中,并通过基础网络设备进行路由。

    kubectl apply -f http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    这个节点访问很慢,我这边基本无法访问。如果节点上无法直接访问,可以创建一个kube-flannel.yml。然后直接将以下内容复制进去:

    1. ---
    2. kind: Namespace
    3. apiVersion: v1
    4. metadata:
    5. name: kube-flannel
    6. labels:
    7. k8s-app: flannel
    8. pod-security.kubernetes.io/enforce: privileged
    9. ---
    10. kind: ClusterRole
    11. apiVersion: rbac.authorization.k8s.io/v1
    12. metadata:
    13. labels:
    14. k8s-app: flannel
    15. name: flannel
    16. rules:
    17. - apiGroups:
    18. - ""
    19. resources:
    20. - pods
    21. verbs:
    22. - get
    23. - apiGroups:
    24. - ""
    25. resources:
    26. - nodes
    27. verbs:
    28. - get
    29. - list
    30. - watch
    31. - apiGroups:
    32. - ""
    33. resources:
    34. - nodes/status
    35. verbs:
    36. - patch
    37. - apiGroups:
    38. - networking.k8s.io
    39. resources:
    40. - clustercidrs
    41. verbs:
    42. - list
    43. - watch
    44. ---
    45. kind: ClusterRoleBinding
    46. apiVersion: rbac.authorization.k8s.io/v1
    47. metadata:
    48. labels:
    49. k8s-app: flannel
    50. name: flannel
    51. roleRef:
    52. apiGroup: rbac.authorization.k8s.io
    53. kind: ClusterRole
    54. name: flannel
    55. subjects:
    56. - kind: ServiceAccount
    57. name: flannel
    58. namespace: kube-flannel
    59. ---
    60. apiVersion: v1
    61. kind: ServiceAccount
    62. metadata:
    63. labels:
    64. k8s-app: flannel
    65. name: flannel
    66. namespace: kube-flannel
    67. ---
    68. kind: ConfigMap
    69. apiVersion: v1
    70. metadata:
    71. name: kube-flannel-cfg
    72. namespace: kube-flannel
    73. labels:
    74. tier: node
    75. k8s-app: flannel
    76. app: flannel
    77. data:
    78. cni-conf.json: |
    79. {
    80. "name": "cbr0",
    81. "cniVersion": "0.3.1",
    82. "plugins": [
    83. {
    84. "type": "flannel",
    85. "delegate": {
    86. "hairpinMode": true,
    87. "isDefaultGateway": true
    88. }
    89. },
    90. {
    91. "type": "portmap",
    92. "capabilities": {
    93. "portMappings": true
    94. }
    95. }
    96. ]
    97. }
    98. net-conf.json: |
    99. {
    100. "Network": "10.244.0.0/16",
    101. "Backend": {
    102. "Type": "vxlan"
    103. }
    104. }
    105. ---
    106. apiVersion: apps/v1
    107. kind: DaemonSet
    108. metadata:
    109. name: kube-flannel-ds
    110. namespace: kube-flannel
    111. labels:
    112. tier: node
    113. app: flannel
    114. k8s-app: flannel
    115. spec:
    116. selector:
    117. matchLabels:
    118. app: flannel
    119. template:
    120. metadata:
    121. labels:
    122. tier: node
    123. app: flannel
    124. spec:
    125. affinity:
    126. nodeAffinity:
    127. requiredDuringSchedulingIgnoredDuringExecution:
    128. nodeSelectorTerms:
    129. - matchExpressions:
    130. - key: kubernetes.io/os
    131. operator: In
    132. values:
    133. - linux
    134. hostNetwork: true
    135. priorityClassName: system-node-critical
    136. tolerations:
    137. - operator: Exists
    138. effect: NoSchedule
    139. serviceAccountName: flannel
    140. initContainers:
    141. - name: install-cni-plugin
    142. image: docker.io/flannel/flannel-cni-plugin:v1.2.0
    143. command:
    144. - cp
    145. args:
    146. - -f
    147. - /flannel
    148. - /opt/cni/bin/flannel
    149. volumeMounts:
    150. - name: cni-plugin
    151. mountPath: /opt/cni/bin
    152. - name: install-cni
    153. image: docker.io/flannel/flannel:v0.22.2
    154. command:
    155. - cp
    156. args:
    157. - -f
    158. - /etc/kube-flannel/cni-conf.json
    159. - /etc/cni/net.d/10-flannel.conflist
    160. volumeMounts:
    161. - name: cni
    162. mountPath: /etc/cni/net.d
    163. - name: flannel-cfg
    164. mountPath: /etc/kube-flannel/
    165. containers:
    166. - name: kube-flannel
    167. image: docker.io/flannel/flannel:v0.22.2
    168. command:
    169. - /opt/bin/flanneld
    170. args:
    171. - --ip-masq
    172. - --kube-subnet-mgr
    173. resources:
    174. requests:
    175. cpu: "100m"
    176. memory: "50Mi"
    177. securityContext:
    178. privileged: false
    179. capabilities:
    180. add: ["NET_ADMIN", "NET_RAW"]
    181. env:
    182. - name: POD_NAME
    183. valueFrom:
    184. fieldRef:
    185. fieldPath: metadata.name
    186. - name: POD_NAMESPACE
    187. valueFrom:
    188. fieldRef:
    189. fieldPath: metadata.namespace
    190. - name: EVENT_QUEUE_DEPTH
    191. value: "5000"
    192. volumeMounts:
    193. - name: run
    194. mountPath: /run/flannel
    195. - name: flannel-cfg
    196. mountPath: /etc/kube-flannel/
    197. - name: xtables-lock
    198. mountPath: /run/xtables.lock
    199. volumes:
    200. - name: run
    201. hostPath:
    202. path: /run/flannel
    203. - name: cni-plugin
    204. hostPath:
    205. path: /opt/cni/bin
    206. - name: cni
    207. hostPath:
    208. path: /etc/cni/net.d
    209. - name: flannel-cfg
    210. configMap:
    211. name: kube-flannel-cfg
    212. - name: xtables-lock
    213. hostPath:
    214. path: /run/xtables.lock
    215. type: FileOrCreate

    接着运行:

    kubectl apply -f kube-flannel.yml

    3.7、node1和node2节点加入Kubernetes集群

    先拉取flannel镜像:

    docker pull query.io/coreos/flannel:v0.11.0-amd64

    接着在node节点上运行加入Kubernetes集群的命令:

    kubeadm join 192.168.74.129:6443 --token zhb1rz.qyi4ld37t0py180b --discovery-token-ca-cert-hash sha256:54f2619a2931211bf21e8f4e0cf1dda00d1bad9331f654e21155ce6b0c331005 

    显示这个信息,则加入成功。

    3.8、查看节点信息

    添加成功后,可以在master节点上查看集群的节点信息。

    kubectl get nodes

    但是,我们看状态信息均为NotReady。这说明节点虽然加入集群了,但是依然报错了。

    先查看master节点的信息:

    kubectl describe nodes master

    我们可以看到master节点下有具体的报错信息“runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized”。

    这里显示的是网络插件没有配置好,参考网络上的教程修复即可。

  • 相关阅读:
    什么是用来评估神经网络,神经网络的数据预处理
    Java基础进阶线程的生命周期
    vue3 生命周期函数,都改了啥?
    数据结构--单链表操作
    鲍威尔暗示将继续加息以解决通胀问题 有何影响?
    第七章:基于敏捷模式S公司质量搭建的第一阶段
    教你轻松使用Fastjson
    【PTQ】Cross-Layer Equalization跨层均衡-证明和实践详细解读
    【LeetCode-中等】128. 最长连续序列(详解)
    Python-sqlparse解析SQL工具库一文详解(二)
  • 原文地址:https://blog.csdn.net/p793049488/article/details/132790455