002.Kubernetes简单入门实例
发布日期:2021-05-19 02:33:59 浏览次数:17 分类:博客文章

本文共 7230 字,大约阅读时间需要 24 分钟。

一 环境准备

1.1 基础环境

Kubernetes模式:单机版

系统环境:CentOS 7/172.24.9.157

部署方式:yum快速部署

其他设置:开启NTP、关闭防火墙及SELinux

二 部署过程

2.1 安装软件

1 [root@k8s ~]# yum -y install etcd kubernetes  2 [root@k8s ~]# vi /etc/sysconfig/docker  3 OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false' #修改OPTIONS值

2.2 前期准备

1 [root@k8s ~]# systemctl start firewalld  2 [root@k8s ~]# firewall-cmd --zone=public --add-port=30001/tcp --permanent  3 [root@k8s ~]# systemctl stop firewalld  4 [root@k8s ~]# systemctl disable firewalld  5 [root@k8s ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf		#开启转发模式  6 [root@k8s ~]# sysctl -p

提示:必须先放通此端口,然后再次关闭防火墙。

2.3 关闭安全鉴权

1 [root@k8s ~]# vi /etc/kubernetes/apiserver  2 KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"	#删除SecurityContextDeny,ServiceAccount

提示:若不关闭鉴权,可能出现以下报错:Error creating: No API token found for service account "default"……

2.4 启动服务

1 [root@k8s ~]# systemctl start docker etcd.service kube-apiserver kube-controller-manager.service kube-scheduler.service kubelet.service kube-proxy.service  2 [root@k8s ~]# systemctl enable docker etcd.service kube-apiserver kube-controller-manager.service kube-scheduler.service kubelet.service kube-proxy.service

2.5 新建MySQL RC文件

1 [root@k8s ~]# mkdir tomcat_kbs  2 [root@k8s ~]# cd tomcat_kbs/  3 [root@k8s tomcat_kbs]# vi mysql-rc.yaml  4 apiVersion: v1  5 kind: ReplicationController			#副本控制器RC  6 metadata:  7   name: mysql				#RC名称,全局唯一  8 spec:  9   replicas: 1				#Pod副本期待的数量 10   selector: 11     app: mysql				#符合目标的Pod拥有此标签 12   template:					#根据此模板创建Pod副本(实例) 13     metadata: 14       labels: 15         app: mysql				#Pod副本拥有的标签,对应RC的Selector 16     spec: 17       containers:				#Pod内容的定义部分 18       - name: mysql				#容器的名称 19         image: mysql:5.6			#容器对应的Docker image 20         ports: 21         - containerPort: 3306		#容器应用监听的端口号 22         env:				#注入容器内的环境变量 23         - name: MYSQL_ROOT_PASSWORD 24           value: "123456"

2.6 发布MySQL RC

1 [root@k8s ~]# cd /root/tomcat_kbs/  2 [root@k8s tomcat_kbs]# kubectl create -f mysql-rc.yaml  3 [root@k8s tomcat_kbs]# kubectl get rc			#查看所创建的RC  4 NAME      DESIRED   CURRENT   READY     AGE  5 mysql     1         1         1         17s  6 [root@k8s tomcat_kbs]# kubectl get pod			#查看Pod情况  7 NAME          READY     STATUS    RESTARTS   AGE  8 mysql-w1f6n   1/1       Running   0          10s

提示:通常可能遇到以下错误——

错误:/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory。

解决:

1 [root@k8s tomcat_kbs]# yum -y install *rhsm*		#安装rhsm,并生成pem  2 [root@k8s tomcat_kbs]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm  3 [root@k8s tomcat_kbs]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem  4 [root@k8s tomcat_kbs]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest	#手动pull

提示:相关删除操作如下:

1 [root@k8s tomcat_kbs]# kubectl delete -f mysql-rc.yaml  2 replicationcontroller "mysql" deleted  3 [root@k8s tomcat_kbs]# kubectl get rc  4 No resources found.  5 [root@k8s tomcat_kbs]# kubectl get pods  6 NAME          READY     STATUS        RESTARTS   AGE  7 mysql-hgkwr   0/1       Terminating   0          17m  8 [root@k8s tomcat_kbs]# kubectl delete po mysql-hgkwr  9 pod "mysql-hgkwr" deleted 10 [root@k8s tomcat_kbs]# kubectl delete pods --all --grace-period=0 --force	#强制删除

2.7 创建MySQL Kubernetes Service

1 [root@k8s tomcat_kbs]# vi mysql-svc.yaml  2 apiVersion: v1  3 kind: Service  4 metadata:  5   name: mysql  6 spec:  7   ports:  8     - port: 3306  9   selector: 10     app: mysql 11 [root@k8s tomcat_kbs]# kubectl create -f mysql-svc.yaml 12 [root@k8s tomcat_kbs]# kubectl get svc 13 NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE 14 kubernetes   10.254.0.1      
443/TCP 16m 15 mysql 10.254.132.65
3306/TCP 54s #Cluster IP

2.8 新建Tomcat RC文件

1 [root@k8s tomcat_kbs]# vi myweb-rc.yaml  2 apiVersion: v1  3 kind: ReplicationController  4 metadata:  5   name: myweb  6 spec:  7   replicas: 2  8   selector:  9     app: myweb 10   template: 11     metadata: 12       labels: 13         app: myweb 14     spec: 15       containers: 16       - name: myweb 17         image: kubeguide/tomcat-app:v1 18         ports: 19         - containerPort: 8080

2.9 发布Tomcat RC

1 [root@k8s tomcat_kbs]# kubectl create -f myweb-rc.yaml  2 [root@k8s tomcat_kbs]# kubectl get pods  3 NAME          READY     STATUS    RESTARTS   AGE  4 mysql-w1f6n   1/1       Running   0          2m  5 myweb-82s04   1/1       Running   0          28s  6 myweb-rsmbq   1/1       Running   0          28s

2.10 创建Tomcat Kubernetes Service

1 [root@k8s tomcat_kbs]# vi myweb-svc.yaml  2 apiVersion: v1  3 kind: Service  4 metadata:  5   name: myweb  6 spec:  7   type: NodePort  8   ports:  9     - port: 8080 10       nodePort: 30001 11   selector: 12     app: myweb 13 [root@k8s tomcat_kbs]# kubectl create -f myweb-svc.yaml

提示:type=NodePort和nodePort=30001的两个属性,表明此service开启了NodePort方式外网访问模式。

Service的虚拟IP是由Kubernetes虚拟出来的内部网络,外部是无法寻址到的。但是有些服务又需要被外部访问到,例如web前段。这时候就需要加一层网络转发,即外网到内网的转发。Kubernetes提供了NodePort、LoadBalancer、Ingress三种方式。

nodePort,在之前的Guestbook示例中,已经演示了NodePort的用法。NodePort的原理是,Kubernetes会在每一个Node上暴露出一个端口:nodePort,外部网络可以通过(任一Node)[NodeIP]:[NodePort]访问到后端的Service。

三 测试验证

3.1 验证Kubernetes相关信息

1 [root@k8s tomcat_kbs]# kubectl get rc  2 NAME      DESIRED   CURRENT   READY     AGE  3 mysql     1         1         1         5m  4 myweb     2         2         2         2m  5 [root@k8s tomcat_kbs]# kubectl get pod  6 NAME          READY     STATUS    RESTARTS   AGE  7 mysql-w1f6n   1/1       Running   0          4m  8 myweb-82s04   1/1       Running   0          2m  9 myweb-rsmbq   1/1       Running   0          2m 10 [root@k8s tomcat_kbs]# kubectl get services 11 NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE 12 kubernetes   10.254.0.1      
443/TCP 19m 13 mysql 10.254.132.65
3306/TCP 3m 14 myweb 10.254.7.163
8080:30001/TCP 1m

提示:typeNodePort和nodePort=30001,表明此Service开启了NodePort方式的外网访问模式。

3.2 浏览器测试

http://172.24.9.157:30001/demo

错误:若出现以下JDBC报错可通过以下操作解决:

解决:

1 [root@k8s ~]# kubectl get ep			#查看相应IP  2 NAME         ENDPOINTS                         AGE  3 kubernetes   172.24.9.157:6443                 21m  4 mysql        172.17.0.2:3306                   5m  5 myweb        172.17.0.3:8080,172.17.0.4:8080   3m  6 [root@k8s ~]# docker ps -a | grep tomcat | awk '{ print $1 }'	#确认容器ID  7 e5cf7adc32d0  8 2293bc1cc724  9 [root@k8s ~]# docker inspect e5cf7adc32d0 | grep hosts 10 [root@k8s ~]# echo "172.17.0.2 mysql" >> /var/lib/kubelet/pods/362cca88-8b54-11e9-8aec-525400162bb6/etc-hosts 11 [root@k8s ~]# docker inspect 2293bc1cc724 | grep hosts 12 [root@k8s ~]# echo "172.17.0.2 mysql" >> /var/lib/kubelet/pods/362ce14d-8b54-11e9-8aec-525400162bb6/etc-hosts

提示:如上报错原因为旧版本jdbc驱动可用,但是现在yaml文件中没有版本号,默认依然是latest,新版jdbc驱动不能连接latest版本的mysql,故需要更改yaml文件,添加版本(建议使用5.6)。

参考文档:https://blog.csdn.net/lz0635/article/details/83303300

上一篇:Java并发-线程池篇-附场景分析
下一篇:.NET Worker Service 如何优雅退出

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月30日 07时00分16秒