1.开发环境
CentOS7.9
- centos7.9的安装是比较麻烦的,包括安装,联网,下载可视化界面,这些都是比较繁琐的
- 这里整理三篇比较好的文章,帮助大家装好开发环境
- CenOS 7 安装详解
- CentOS 7 安装完毕之后联网的解决方法
- CentOs 7 安装可视化桌面
接下来就步入正题,kubernetes部署算是有一定门槛的。为了不从入门到放弃,推荐一开始安装单机版作为入门熟悉kubectl指令、了解工作原理。
2. 开始安装
2.1.关闭防火墙
切换到root用户执行以下命令
1.关闭centos自带的防火墙
# systemctl disable firewalld
# systemctl stop firewalld
2.安装etcd和kubernetes软件(会自动安装docker)
# yum install -y etcd kubernetes
2.2修改两处配置
- Docker配置文件/etc/sysconfig/docker, OPTIONS=’–selinux-enabled=false –insecure-registry gcr.io’
- Kubernetes apiservce配置文件/etc/kubernetes/apiserver,把–admission_control参数中的ServiceAccount删除
2.2.启动所有服务
# systemctl start etcd
# systemctl start docker
# systemctl start kube-apiserver
# systemctl start kube-controller-manager
# systemctl start kube-scheduler
# systemctl start kubelet
# systemctl start kube-proxy
3.查看版本,安装完成
kubectl version
- k8s常用指令
# 查看版本
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
# 显示集群信息
$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
# 查看集群中有几个Node
$ kubectl get nodes
NAME STATUS AGE
127.0.0.1 Ready 18h
# 运行一个镜像
$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
deployment "my-nginx" created
# 查看pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-cwlbb 0/1 ContainerCreating 0 20s
my-nginx-379829228-czk6w 1/1 Running 0 20s
# 查看服务详情信息
$ kubectl describe pod my-nginx-379829228-cwlbb
# 查看已部署
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 2 2 2 2 3m
# 删除pod
$ kubectl delete pod my-nginx-379829228-cwlbb
pod "my-nginx-379829228-cwlbb" deleted
# 再次查看pod,发现由于replicas机制,pod又生成一个新的
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-czk6w 1/1 Running 0 11m
my-nginx-379829228-gjd7d 0/1 ContainerCreating 0 5s
# 删除部署的my-nginx服务。彻底删除pod
$ kubectl delete deployment my-nginx
deployment "my-nginx" deleted
4.部署mysql
- MySQL服务创建一个 RC 文件。
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-rc
labels:
name: mysql-rc
spec:
replicas: 1
selector:
name: mysql-pod
template:
metadata:
labels:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql"
- MySQL服务创建一个 SVC 文件
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 32000
selector:
name: mysql-pod
- 执行下面这两句话
# kubectl create -f mysql-rc.yaml
# kubectl create -f mysql-svc.yaml
这样就可以部署成功了
5. 部署tomcat
- Tomcat 服务创建一个 RC 文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 2
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: '10.254.230.147' # kubectl get svc可得
- name: MYSQL_SERVICE_PORT
value: '3306'
- Tomcat 服务创建一个 SVC 文件
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
- 执行以下两句话,就可以部署成功
# kubectl create -f myweb-rc.yaml
# kubectl create -f myweb-svc.yaml
接下来我们查看一下我们的部署信息
- 查看pods
- 查看service
- 查看svc
6.连接数据库
kubectl get rc,services
yum install -y mysql
mysql -h 10.254.230.147 -P 3306 -uroot -p123456
可以看到,这边连接是没有问题的
# docker ps
找到mysql的CONTAINER ID
这里我的是2f4e3f3314c9
suir
虽然连接成功,但是我们还是看到了一个警告,现在我们要做的就是消除这个警告
- 接着再输入以下命令
mysql> alter user 'root'@'%' identified with mysql_native_password by'root';
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> alter user 'root'@'%' identified by '123456';
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
- 这个时候你再用mysql -h 10.109.17.0 -P 3306 -uroot -p123456这个命令直接登录就OK了
在这里我们就实现了,一个tomcat访问一个mysql,不过我们接下来要尝试在一个虚拟机上,创建两个mysql服务,用tomcat去访问这两个mysql
- web访问mysql
浏览器访问:http://127.0.0.1:30001/
会看到tomcat首页
- 访问成功
进入mysql查看
# mysql -uroot -p123456 mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| HPE_APP |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use HPE_APP
mysql> show tables;
+-------------------+
| Tables_in_HPE_APP |
+-------------------+
| T_USERS |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from T_USERS;
+----+---------------+-------+
| ID | USER_NAME | LEVEL |
+----+---------------+-------+
| 1 | me | 100 |
| 2 | our team | 100 |
| 3 | HPE | 100 |
| 4 | teacher | 100 |
| 5 | docker | 100 |
| 6 | google | 100 |
| 7 | jiangxiaolong | 10000 |
+----+---------------+-------+
7 rows in set (0.01 sec)