• k8s-linux上安装


    目录

    1、环境准备

    1.1、服务器准备

    1.2、服务器hostname设置

    1.3、添加hosts 网络主机配置,三台虚拟机都要设置

    1.4、关闭防火墙,三台虚拟机都要设置,生产环境跳过这一步

    2、安装docker,3台服务器都安装

    3、安装kubeadmin加载k8s镜像

    3.1、添加kubernetes yum源

    3.2、查看kubeadm版本

    3.3、下载

    3.4、下载后,进入kubernetes包,发现kubectl和kubelet存在1.24.1版本

    3.4.1 删除1.24.1版本

    3.4.2 下载kubelet-1.15.6

    3.4.3 下载kebectl-1.15.6

    3.5、安装kubeadmin组件

    3.6、设置kebelet的开机启动

    3.7、拉取镜像

    3.7.1、查看需要依赖哪些镜像

    3.7.2、拉取镜像

    3.7.3 tag一下镜像

    3.7.4 拉取flannel和kubernetes-dashboard-amd64

    3.7.5 以下步骤逐一执行

    3.8 以上从3.1到3.7的每一个步骤在每台服务器上都操作一次

    4 创建k8s集群

    4.1 kubeadmin/kubelet/kubectl的区别

    4.2 master主服务器创建

    4.3 执行要求执行的命令

    如果上面的token忘记了,可以通过以下命令获取:

    ​编辑

    4.4 安装flannel组件

     4.5 从节点加入集群

     5 kubernetes-dashboard安装

    5.1 拉取dashboard镜像

    6 Deployment部署

    6.1 Deployment部署脚本范本

     6.2 与部署相关的常用命令

    6.3 本地部署一个tomcat

    7 基于NFS的文件共享

     7.1 master节点安装NFS

    7.2 创建文件共享目录

    7.3 配置文件共享配置

    7.4 启动NFS服务

    7.5 启动rpc服务

    7.6 查看exports配置是否生效

     7.7 节点安装NFS

     7.8 从节点服务器上查看主服务器上对外共享的挂载文件夹

     7.9 挂载主机共享文件目录到从节点本机的映射目录

    7.10 设置节点服务器nfs为开机启动

    7.11 其他从节点重复7.7-7.10的步骤安装nfs

    8 利用nfs系统部署tomcat

    8.1 删除以前部署的tomcat

     8.2 重新编辑tomcat deploy的yml文件

    8.3 创建部署文件

    9 利用Rinetd实现Service负载均衡-端口转发工具Rinetd

    9.1 重新编辑/local/k8s/tomcat-service下的tomcat-service.yml文件

    9.2 重新创建tomcat-service.yml

    9.3 查看tomcat-service

    9.4 nfs对外暴漏的共享文件下存放web文件

    9.5 端口转发工具Rinetd

     9.5.1 Rinetd工具安装

    10 K8S部署调整命令

     10.1 资源限定


    参考:kubernetes 集群安装,离线版 - 简书 (jianshu.com)

    docker的卸载:(61条消息) Docker 安装和卸载详细步骤_北漂编程小王子的博客-CSDN博客_卸载docker

    1、环境准备

    1.1、服务器准备

    一主二从架构:

    1. master主机:192.168.56.110
    2. node1服务器:192.168.56.111
    3. node2服务器:192.168.56.112

    1.2、服务器hostname设置

    1. timedatectl set-timezone Asia/Shanghai #服务器都要执行
    2. hostnamectl set-hostname master #110执行
    3. hostnamectl set-hostname node1 #111执行
    4. hostnamectl set-hostname node2 #112执行

    1.3、添加hosts 网络主机配置,三台虚拟机都要设置

    1. vim /etc/hosts
    2. #主从节点服务器主机名和上面设置的主机名要一致,
    3. 192.168.56.110  master
    4. 192.168.56.111  node1
    5. 192.168.56.112  node2

    三个节点直接互相通过:ping 主机名 能ping同。如在master上:ping node1

    1.4、关闭防火墙,三台虚拟机都要设置,生产环境跳过这一步

    学习环境可以这样设置,生产环境不要这样设置,避免因为防火墙原因造成访问不通问题:

    1. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    2. setenforce 0
    3. systemctl disable firewalld
    4. systemctl stop firewalld
    5. #重启网卡
    6. service network restart

    如图:

    2、安装docker,3台服务器都安装

    注意安装版本选18.09.5。

    参考地址:(61条消息) docker-安装docker_荆茗Scaler的博客-CSDN博客_docker 安装docker

    3、安装kubeadmin加载k8s镜像

    由于kubeadm是依赖kubelet, kubectl的,所以我们只需要下载kubeadm的rpm,其依赖就自动下载下来了。但是版本可能不是我们想要的,所以可能需要单独下载。比如我下载kubeadm-1.15.6,它依赖的可能是kubelet-1.16.x。

    3.1、添加kubernetes yum源

    1. cat > /etc/yum.repos.d/kubernetes.repo <<EOF
    2. [kubernetes]
    3. name=Kubernetes Repo
    4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    5. gpgcheck=1
    6. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    7. enabled=1
    8. EOF

    3.2、查看kubeadm版本

    1. yum list kubeadm --showduplicates
    2. ...
    3. kubeadm.x86_64 1.15.6-0
    4. ...

    3.3、下载

    yum install --downloadonly --downloaddir ~/k8s/kubernetes kubeadm-1.15.6

    3.4、下载后,进入kubernetes包,发现kubectl和kubelet存在1.24.1版本

    3.4.1 删除1.24.1版本

    1. rm -f 17013403794d47f80ade3299c74c3a646d37f195c1057da4db74fd3fd78270f1-kubectl-1.24.1-0.x86_64.rpm
    2. rm -f d184b7647df76898e431cfc9237dea3f8830e3e3398d17b0bf90c1b479984b3f-kubelet-1.24.1-0.x86_64.rpm

    3.4.2 下载kubelet-1.15.6

    yum install --downloadonly --downloaddir ~/k8s/kubernetes kubelet-1.15.6

    3.4.3 下载kebectl-1.15.6

    yum install --downloadonly --downloaddir ~/k8s/kubernetes kubectl-1.15.6

    3.5、安装kubeadmin组件

    yum install ~/k8s/kubernetes/*.rpm

    3.6、设置kebelet的开机启动

    我们并不需要启动kubelet,就算启动,也是不能成功的。执行kubeadm命令,会生成一些配置文件 ,这时才会让kubelet启动成功的。

    systemctl enable kubelet

    3.7、拉取镜像

    执行kubeadm时,需要用到一些镜像,我们需要提前准备。

    3.7.1、查看需要依赖哪些镜像

    kubeadm config images list

    在生产环境,是肯定访问不了k8s.gcr.io这个地址的。在有大陆联网的机器上,也是无法访问的。所以我们需要使用国内镜像先下载下来。

    解决办法很简单,我们使用docker命令搜索下:

    docker search kube-apiserver

     一般选择星级别高的,即STARTS多的。

    3.7.2、拉取镜像

    1. docker pull aiotceo/kube-apiserver:v1.15.6
    2. docker pull aiotceo/kube-controller-manager:v1.15.6
    3. docker pull aiotceo/kube-scheduler:v1.15.6
    4. docker pull aiotceo/kube-proxy:v1.15.6
    5. docker pull aiotceo/pause:3.1
    6. docker pull aiotceo/etcd:3.3.10
    7. docker pull aiotceo/coredns:1.3.1

    查看镜像:

    3.7.3 tag一下镜像

    为了让kubeadm程序能找到k8s.gcr.io下面的镜像,需要把刚才下载的镜像名称重新打一下tag 

    docker images | grep aiotceo | sed 's/aiotceo/k8s.gcr.io/' | awk '{print "docker tag " $3 " " $1 ":" $2}' | sh

     删除旧的镜像:

    docker images | grep aiotceo | awk '{print "docker rmi " $1 ":" $2}' | sh

    3.7.4 拉取flannel和kubernetes-dashboard-amd64

    1. docker pull jmgao1983/flannel:v0.11.0-amd64
    2. docker pull loveone/kubernetes-dashboard-amd64:v1.10.1

    k8s 的完整镜像:

    3.7.5 以下步骤逐一执行

    1. 1. systemctl enable docker.service
    2. 2. docker info | grep Cgrou
    3. 3. vim /etc/docker/daemon.json
    4. {
    5. "exec-opts":["native.cgroupdriver=systemd"]
    6. }
    7. 4. 关闭交换区
    8. swapoff -a
    9. vi /etc/fstab
    10. #swap一行注释
    11. 5. 配置网桥,和图片错误没关系
    12. cat <<EOF > /etc/sysctl.d/k8s.conf
    13. net.bridge.bridge-nf-call-ip6tables = 1
    14. net.bridge.bridge-nf-call-iptables = 1
    15. EOF
    16. sysctl --system

    3.8 以上从3.1到3.7的每一个步骤在每台服务器上都操作一次

    4 创建k8s集群

    4.1 kubeadmin/kubelet/kubectl的区别

    • kubeadmin:是kubernetes集群快速构建工具,这个工具能够使从节点快速的加入到集群中,简化集群构建工作。
    • kubelet:kubelet运行在所有节点上,负责启动pod和容器,以系统服务形式出现
    • kebectl:kubectl是kubenetes命令行工具,提供指令

    如果服务器重启,想恢复服务,要怎么操作呢?

    方法一:启动节点k8s服务

    systemctl start kubelet

    方法二:设置开机启动

    systemctl enable kubelet

    4.2 master主服务器创建

    1. #--kubernetes-version:指定版本
    2. #--pod-network-cidr:设置pod内虚拟ip的边界。
    3. kubeadm init --kubernetes-version=v1.15.6 --pod-network-cidr=10.24.0.0/16

    如果出现以下错误:

     请按照这个步骤进行配置:

    1. 1. systemctl enable docker.service
    2. 2. docker info | grep Cgrou
    3. 3. 一定要保证k8s的cgroup 与 docker的一致,否则可能会导致从节点k8s启动失败等问题
    4. vim /etc/docker/daemon.json
    5. {
    6. "exec-opts":["native.cgroupdriver=systemd"]
    7. }
    8. 4. 关闭交换区
    9. swapoff -a
    10. vi /etc/fstab
    11. #swap一行注释
    12. 5. cpu不够2个,可以修改虚拟机cpu数量为2
    13. 6. 配置网桥,和图片错误没关系
    14. cat <<EOF > /etc/sysctl.d/k8s.conf
    15. net.bridge.bridge-nf-call-ip6tables = 1
    16. net.bridge.bridge-nf-call-iptables = 1
    17. EOF
    18. sysctl --system

     修改k8s的cgroup:failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" - wangzy-Zj - 博客园 (cnblogs.com)

    4.3 执行要求执行的命令

    执行3.9.2中的init命令之后,会出现以下要求执行的命令,复制命令,直接执行即可。

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

    1. #以下文件中是集群本身的信息以及安全授权的信息
    2. /etc/kubernetes/admin.conf
    3. #k8s默认读取的配置文件夹
    4. $HOME/.kube/config

    1. # 这条命令是需要在从节点服务器执行的,执行完后会把从节点加入到集群
    2. kubeadm join 192.168.56.110:6443 --token aw4mln.kvuz5241deb17e6q \
    3. --discovery-token-ca-cert-hash sha256:b8b1c666b3ab77f53acadd084dca7be2a94c4ad9f7ad06ec25ba48e5bd505cd2

    如果上面的token忘记了,可以通过以下命令获取:

    kubeadm token list

    4.4 安装flannel组件

    pod和pod之间的通信协议组件。

    1. #获取节点信息
    2. kubectl get nodes
    3. #查看所有名称空间下的pod容器,包含k8s自己内部的
    4. kubectl get pod --all-namespaces
    5. #pod和pod容器之间通信的协议组件的创建
    6. kubectl create -f kube-flannel.yml

     创建kube-flannel.yml文件,然后执行:kubectl create -f kube-flannel.yml,完成flannel组件安装。以下是:v0.15.1  版本的内容。

    1. cat << EOF > kube-flannel.yml
    2. ---
    3. apiVersion: policy/v1beta1
    4. kind: PodSecurityPolicy
    5. metadata:
    6. name: psp.flannel.unprivileged
    7. annotations:
    8. seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
    9. seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
    10. apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
    11. apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
    12. spec:
    13. privileged: false
    14. volumes:
    15. - configMap
    16. - secret
    17. - emptyDir
    18. - hostPath
    19. allowedHostPaths:
    20. - pathPrefix: "/etc/cni/net.d"
    21. - pathPrefix: "/etc/kube-flannel"
    22. - pathPrefix: "/run/flannel"
    23. readOnlyRootFilesystem: false
    24. # Users and groups
    25. runAsUser:
    26. rule: RunAsAny
    27. supplementalGroups:
    28. rule: RunAsAny
    29. fsGroup:
    30. rule: RunAsAny
    31. # Privilege Escalation
    32. allowPrivilegeEscalation: false
    33. defaultAllowPrivilegeEscalation: false
    34. # Capabilities
    35. allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
    36. defaultAddCapabilities: []
    37. requiredDropCapabilities: []
    38. # Host namespaces
    39. hostPID: false
    40. hostIPC: false
    41. hostNetwork: true
    42. hostPorts:
    43. - min: 0
    44. max: 65535
    45. # SELinux
    46. seLinux:
    47. # SELinux is unused in CaaSP
    48. rule: 'RunAsAny'
    49. ---
    50. kind: ClusterRole
    51. apiVersion: rbac.authorization.k8s.io/v1
    52. metadata:
    53. name: flannel
    54. rules:
    55. - apiGroups: ['extensions']
    56. resources: ['podsecuritypolicies']
    57. verbs: ['use']
    58. resourceNames: ['psp.flannel.unprivileged']
    59. - apiGroups:
    60. - ""
    61. resources:
    62. - pods
    63. verbs:
    64. - get
    65. - apiGroups:
    66. - ""
    67. resources:
    68. - nodes
    69. verbs:
    70. - list
    71. - watch
    72. - apiGroups:
    73. - ""
    74. resources:
    75. - nodes/status
    76. verbs:
    77. - patch
    78. ---
    79. kind: ClusterRoleBinding
    80. apiVersion: rbac.authorization.k8s.io/v1
    81. metadata:
    82. name: flannel
    83. roleRef:
    84. apiGroup: rbac.authorization.k8s.io
    85. kind: ClusterRole
    86. name: flannel
    87. subjects:
    88. - kind: ServiceAccount
    89. name: flannel
    90. namespace: kube-system
    91. ---
    92. apiVersion: v1
    93. kind: ServiceAccount
    94. metadata:
    95. name: flannel
    96. namespace: kube-system
    97. ---
    98. kind: ConfigMap
    99. apiVersion: v1
    100. metadata:
    101. name: kube-flannel-cfg
    102. namespace: kube-system
    103. labels:
    104. tier: node
    105. app: flannel
    106. data:
    107. cni-conf.json: |
    108. {
    109. "name": "cbr0",
    110. "cniVersion": "0.3.1",
    111. "plugins": [
    112. {
    113. "type": "flannel",
    114. "delegate": {
    115. "hairpinMode": true,
    116. "isDefaultGateway": true
    117. }
    118. },
    119. {
    120. "type": "portmap",
    121. "capabilities": {
    122. "portMappings": true
    123. }
    124. }
    125. ]
    126. }
    127. net-conf.json: |
    128. {
    129. "Network": "10.244.0.0/16",
    130. "Backend": {
    131. "Type": "vxlan"
    132. }
    133. }
    134. ---
    135. apiVersion: apps/v1
    136. kind: DaemonSet
    137. metadata:
    138. name: kube-flannel-ds
    139. namespace: kube-system
    140. labels:
    141. tier: node
    142. app: flannel
    143. spec:
    144. selector:
    145. matchLabels:
    146. app: flannel
    147. template:
    148. metadata:
    149. labels:
    150. tier: node
    151. app: flannel
    152. spec:
    153. affinity:
    154. nodeAffinity:
    155. requiredDuringSchedulingIgnoredDuringExecution:
    156. nodeSelectorTerms:
    157. - matchExpressions:
    158. - key: kubernetes.io/os
    159. operator: In
    160. values:
    161. - linux
    162. hostNetwork: true
    163. priorityClassName: system-node-critical
    164. tolerations:
    165. - operator: Exists
    166. effect: NoSchedule
    167. serviceAccountName: flannel
    168. initContainers:
    169. - name: install-cni-plugin
    170. image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
    171. command:
    172. - cp
    173. args:
    174. - -f
    175. - /flannel
    176. - /opt/cni/bin/flannel
    177. volumeMounts:
    178. - name: cni-plugin
    179. mountPath: /opt/cni/bin
    180. - name: install-cni
    181. image: quay.io/coreos/flannel:v0.15.1
    182. command:
    183. - cp
    184. args:
    185. - -f
    186. - /etc/kube-flannel/cni-conf.json
    187. - /etc/cni/net.d/10-flannel.conflist
    188. volumeMounts:
    189. - name: cni
    190. mountPath: /etc/cni/net.d
    191. - name: flannel-cfg
    192. mountPath: /etc/kube-flannel/
    193. containers:
    194. - name: kube-flannel
    195. image: quay.io/coreos/flannel:v0.15.1
    196. command:
    197. - /opt/bin/flanneld
    198. args:
    199. - --ip-masq
    200. - --kube-subnet-mgr
    201. resources:
    202. requests:
    203. cpu: "100m"
    204. memory: "50Mi"
    205. limits:
    206. cpu: "100m"
    207. memory: "50Mi"
    208. securityContext:
    209. privileged: false
    210. capabilities:
    211. add: ["NET_ADMIN", "NET_RAW"]
    212. env:
    213. - name: POD_NAME
    214. valueFrom:
    215. fieldRef:
    216. fieldPath: metadata.name
    217. - name: POD_NAMESPACE
    218. valueFrom:
    219. fieldRef:
    220. fieldPath: metadata.namespace
    221. volumeMounts:
    222. - name: run
    223. mountPath: /run/flannel
    224. - name: flannel-cfg
    225. mountPath: /etc/kube-flannel/
    226. volumes:
    227. - name: run
    228. hostPath:
    229. path: /run/flannel
    230. - name: cni-plugin
    231. hostPath:
    232. path: /opt/cni/bin
    233. - name: cni
    234. hostPath:
    235. path: /etc/cni/net.d
    236. - name: flannel-cfg
    237. configMap:
    238. name: kube-flannel-cfg
    239. EOF

    如果所有pod都是Running状态,那么就成功master节点就成功创建好了。

     4.5 从节点加入集群

    从节点上按照上面从3.1到3.7执行一遍

    执行3.9.3中的:kubeadm join ..... 命令后,就加入集群中了。

     5 kubernetes-dashboard安装

    5.1 拉取dashboard镜像

    docker pull loveone/kubernetes-dashboard-amd64:v1.10.1

    预留。。。。。。。。。。。

    6 Deployment部署

    6.1 Deployment部署脚本范本

     6.2 与部署相关的常用命令

    1. #创建部署
    2. kubectl create -f 部署yml文件
    3. #更新部署配置
    4. kubectl apply -f 部署yml文件
    5. #查看已部署pod
    6. kubectl get pod [-o wide]
    7. #查看pod详细信息
    8. kubectl describe pod pod名称
    9. #查看pod日志输出
    10. kubectl logs [-f] pod名称

    6.3 本地部署一个tomcat

    1、创建一个目录存放部署yml文件

    mkdir -p /local/k8s/tomcat-deploy

    2、创建部署文件

    vim tomcat-deploy.yml 

    1. apiVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. name: tomcat-deploy
    5. spec:
    6. replicas: 2
    7. template:
    8. metadata:
    9. labels:
    10. app: tomcat-cluster #要被tomcat-service选择绑定,绑定成功,就可转发请求到被绑定的服务
    11. spec:
    12. containers:
    13. - name: tomcat-cluster
    14. image: tomcat:latest #容器镜像
    15. ports:
    16. - containerPort: 8080 #pod内的端口

    3、创建部署

    kubectl create -f ./tomcat-deploy.yml

    4、查看部署

    kubectl get deployment

     5、获取详细信息的pod

    kubectl get pod -o wide

     6、查看某一个pod的详细信息

    kubectl describe pod tomcat-deploy-b76dd4475-hh9zf(pod名称)

    7、查看pod内部的日志

    kubectl logs tomcat-deploy-b76dd4475-hh9zf(pod名称)

    目前要想访问tomcat还是不行的,需要创建一个service

    8、创建tomcat-service包的路径

    mkdir -p /local/k8s/tomcat-service

    9、创建tomcat-service服务yml 文件,service服务能够负载请求到其他node节点。

    vim tomcat-service.yml

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: tomcat-service
    5. spec:
    6. type: NodePort
    7. selector:
    8. app: tomcat-cluster #选择绑定的集群名,是tomcat部署文件中设置的模板标签名
    9. ports:
    10. - port: 8000 #service的pod中ip
    11. targetPort: 8080 #node节点中pod内服务的端口
    12. nodePort: 32500 #映射宿主机的端口,三个tomcat服务映射的宿主机端口

    10、创建tomcat-service服务

    kubectl create -f ./tomcat-service.yml 

    11、查看服务是否创建成功

    kubectl get service

    12、查看服务service的详细信息

    kubectl describe service tomcat-service

    13、进入容器

    kubectl exec -it tomcat-deployment-795d745898-fvswl /bin/bash

    以上tomcat就可以通过ip:32500 访问了,如果访问不通,参考:

    (76条消息) k8s使用kubectl创建tomcat访问页面出现404页面_吃葡萄不吐西瓜皮~的博客-CSDN博客

    7 基于NFS的文件共享

    • NFS:Network File System
    • 由SUN公司研制的文件传输协议。
    • NFS主要采用远程过程调用RPC机制实现文件传输,给使用者读取远程文件就像本地读取文件一样方便。
    • yum install -y nfs-utils rpcbind 。由文件提供方来安装。

     7.1 master节点安装NFS

    由master节点服务器作为文件共享服务器。

    yum install -y nfs-utils rpcbind

    7.2 创建文件共享目录

    这个目录先会存放所有需要部署的共享文件。

    mkdir -p /usr/local/data/www-data
    

    7.3 配置文件共享配置

    1. vim /etc/exports
    2. #以下为exports中内容。192.168.56.110/24为提供方服务器ip,rw为读写权限,sync为本地或远程有文件变更时及时同步变更的内容。
    3. /usr/local/data/www-data 192.168.56.110/24(rw,sync)
    1. #重新加载配置文件
    2. rinetd -c /etc/rinetd.conf

     

    7.4 启动NFS服务

    1. #启动服务
    2. systemctl start nfs.service
    3. #设置为开机启动
    4. systemctl enable nfs.service

    7.5 启动rpc服务

    1. #启动服务
    2. systemctl start rpcbind.service
    3. #设置为开机启动
    4. systemctl enable rpcbind.service

    7.6 查看exports配置是否生效

    exportfs

     显示下面成功。

     7.7 节点安装NFS

    node节点上安装nfs-utils工具集就可以了。

    yum install -y nfs-utils

     7.8 从节点服务器上查看主服务器上对外共享的挂载文件夹

    showmount -e 192.168.56.110

     可以查出 /usr/local/data/www-data对外共享文件:

     7.9 挂载主机共享文件目录到从节点本机的映射目录

    /mnt下不是真正存在远程文件,而是映射的远程文件,连接到主服务器上读取。

    mount 192.168.56.110:/usr/local/data/www-data /mnt

    7.10 设置节点服务器nfs为开机启动

    systemctl enable nfs.service

    7.11 其他从节点重复7.7-7.10的步骤安装nfs

    8 利用nfs系统部署tomcat

    8.1 删除以前部署的tomcat

    1. #1、查看部署
    2. kubectl get deployment
    3. #2、删除部署文件
    4. kubectl delete deployment 部署文件名称
    5. #3、查看pod
    6. kubectl get pod
    7. #4、查看service
    8. kubectl get service
    9. #5、删除service
    10. kubectl delete service service名称

     8.2 重新编辑tomcat deploy的yml文件

    vim tomcat-deploy.yml 

    1. apiVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. name: tomcat-deploy
    5. spec:
    6. replicas: 2
    7. template:
    8. metadata:
    9. labels:
    10. app: tomcat-cluster #要被tomcat-service选择绑定,绑定成功,就可转发请求到被绑定的服务
    11. spec:
    12. volumes:
    13. - name: web-app #别名
    14. hostPath:
    15. path: /mnt #从节点容器挂载点,宿主机原始目录
    16. containers:
    17. - name: tomcat-cluster
    18. image: tomcat:latest #容器镜像
    19. ports:
    20. - containerPort: 8080 #pod内的端口
    21. volumeMounts:
    22. - name: web-app
    23. mountPath: /usr/local/tomcat/webapps #用/mnt目录下的内容替代调pod中的这个目录下的内容

    8.3 创建部署文件

    1. kubectl create -f tomcat-deploy.yml
    2. #进入pod容器内部
    3. kubectl exec -it pod名称 /bin/bash

    9 利用Rinetd实现Service负载均衡-端口转发工具Rinetd

    9.1 重新编辑/local/k8s/tomcat-service下的tomcat-service.yml文件

    我们不在使用node节点对外暴漏32500端口来接受外部请求,所有请求都得需要master节点接收。

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: tomcat-service
    5. spec:
    6. # type: NodePort
    7. selector:
    8. app: tomcat-cluster
    9. ports:
    10. - port: 8000
    11. targetPort: 8080
    12. # nodePort: 32500

    9.2 重新创建tomcat-service.yml

    kubectl create -f tomcat-service.yml

    9.3 查看tomcat-service

    1. kubectl get service
    2. kubectl describe service tomcat-service

     

    9.4 nfs对外暴漏的共享文件下存放web文件

    cd /usr/local/data/www-data/test
    

    vim index.jsp

    <%=request.getLocalAddr()%>
    

    访问master节点k8s的虚拟:ip+端口

     可以看出被随机转发给下游节点了。


    9.5 端口转发工具Rinetd

     9.5.1 Rinetd工具安装

    1. cd /usr/local
    2. wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
    3. tar -zxvf rinetd.tar.gz 或者 unzip rinetd.tar.gz
    4. cd /rinetd
    5. sed -i 's/65536/65535/g' rinetd.c
    6. mkdir -p /usr/man
    7. yum install -y gcc
    8. make && make install
    9. vim /etc/rinetd.conf
    10. #以下为rinetd.conf的内容,宿主机的ip port 映射 k8s的 ip port
    11. 0.0.0.0 8000 10.109.146.76 8000
    12. #重新加载配置
    13. rinetd -c /etc/rinetd.conf
    14. #查看服务其上ip和暴漏的端口号
    15. netstat -tulpn

    10 K8S部署调整命令

     10.1 资源限定

     下面内容可以更新到部署文件的yml中,做资源限定。更新内容后,可执行:

    kubectl apply -f xxx.yml

    1. containers:
    2. -name: tomcat-cluster
    3. image: tomcat:latest
    4. resources:
    5. requests: #最少的需求
    6. cpu: 1 #至少有一个cpu空闲
    7. memory: 500Mi #至少内存有500mb空闲 才能创建容器pod
    8. limits: #上限
    9. cpu: 2 #上限2个cpu
    10. memory: 1024Mi #内存上限1024mb

  • 相关阅读:
    TikTok Shop商品的评价有哪些规则?
    前端算法之二分查找
    【C++】内联函数的原理及使用
    C++ Reference: Standard C++ Library reference: C Library: cerrno
    ArcGIS导出Excel中文乱码及shp添加字段3个字被截断
    FPGA基础 - 1
    融云直播 SDK 玩法翻新,入围信通院「实时互动创新应用优秀案例」
    低噪声 256 细分微步进电机驱动MS35774/MS35774A(汽车应用级别)
    C++11特性——右值引用
    【python学习小案例】提升兴趣之模拟系统入侵
  • 原文地址:https://blog.csdn.net/jll126/article/details/125193274