DevOps搭建(十五)-kubernetes部署项目详细步骤
1、k8s简介
k8s官网地址
https://kubernetes.io/zh-cn/docs/home/
2、安装kuboard
详细步骤可参考官网
https://kuboard.cn/install/install-k8s.html
2.1、环境准备
至少 2 台 2核4G 的服务器。
选择v1.19,因为高版本的已经把docker给舍弃掉了。
https://kuboard.cn/install/history-k8s/install-k8s-1.19.x.html
2.2、修改 hostname
主机执行
# 修改 hostname
hostnamectl set-hostname k8master
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
从机执行
# 修改 hostname
hostnamectl set-hostname k8sworker
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
2.3、安装docker及kubelet
主机和从机都要执行
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
# export REGISTRY_MIRROR="http://f1361db2.m.daocloud.io"
# 华为云镜像
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5
2.4、初始化 master 节点
2.4.1、执行初始化脚本
注意只在master节点中执行
# 只在 master 节点执行
# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=192.168.88.126
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5
2.4.2、检查 master 初始化结果
执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
# 只在 master 节点执行
# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide
查看 master 节点初始化结果
# 查看 master 节点初始化结果
kubectl get nodes -o wide
2.5、初始化 worker节点
2.5.1、获得 join命令参数
在 master 节点上执行
# 只在 master 节点执行
kubeadm token create --print-join-command
可获取kubeadm join 命令及参数,如下所示
kubeadm join apiserver.demo:6443 --token grrmtv.3dr3rm4vpqr76y9o --discovery-token-ca-cert-hash sha256:5d9753dfa125ea514cbc66d31151eff395ac4364fd91675ad0460a9d6795f606
2.5.2、初始化worker
针对所有的 worker 节点执行
# 只在 worker 节点执行
# 替换 x.x.x.x 为 master 节点的内网 IP
export MASTER_IP=192.168.88.126
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token grrmtv.3dr3rm4vpqr76y9o --discovery-token-ca-cert-hash sha256:5d9753dfa125ea514cbc66d31151eff395ac4364fd91675ad0460a9d6795f606
2.5.3、检查初始化结果
只在 master 节点执行
# 只在 master 节点执行
kubectl get nodes -o wide
输出结果如下所示:
3、安装kuboard图形化管理工具
官方详细步骤地址:
https://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85
3.1、执行 Kuboard v3 在 K8S 中的安装
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
3.2、等待 Kuboard v3 就绪
在master节点上执行以下指令,等待 kuboard 名称空间中所有的 Pod 就绪,如下所示
watch kubectl get pods -n kuboard
3.3、访问 Kuboard
http://192.168.88.126:30080/
输入初始用户名和密码,并登录
用户名: admin
密码: Kuboard123
4、基本操作
4.1、Namespace操作
命名空间是为了隔离各个环境的,比如开发环境叫dev,测试环境叫test等,执行以下语句就能创建一个命名空间
4.1.1、创建命名空间
方式一
kubectl create ns test
方式二
此外还可以通过yml的方式创建,如先创建一个namespace-test.yml,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: test
kubectl apply -f namespace-test.yml
4.1.2、删除命名空间
kubectl delete ns test
4.1.3、查看所有命名空间
kubectl get ns
4.2、Pod操作
4.2.1、查看pod
查看所有的pod
注意:最后要加上 -A,如果不加,默认查询default命名空间下的pod
kubectl get pods -A
查看指定命名空间的pod
kubectl get pods -n test
4.2.2、运行一个pod
方式一
kubectl run nginx --image=nginx:latest
也可以指定具体的镜像名和命名空间,
例如我们可以到一个国内的镜像站:https://hub.daocloud.io/
下找到nginx对应具体镜像daocloud.io/library/nginx:1.9.1版本进行安装,并指定安装到test命名空间下。
kubectl run nginx --image=daocloud.io/library/nginx:1.9.1 -n test
方式二
此外还可以通过yml的方式创建,如先创建一个pod-test.yml,内容如下,其中containers下可以有多个镜像信息,也就是说一个pod里可以部署多个docker容器:
apiVersion: v1
kind: Pod
metadata:
name: nginx-yml
namespace: test
spec:
containers:
- image: daocloud.io/library/nginx:1.9.1
name: nginx-yml
kubectl apply -f pod-test.yml
查看pod详情可以知道pod内部的ip
kubectl describe pod nginx -n test
得到ip,发现这个ip其实是在步骤2.4.1中POD_SUBNET设定的ip范围。
接着我们可以直接curl 10.100.162.196可看到nginx响应相关信息,但是现在还无法通过外部访问。
4.2.3、查看pod的详细信息
以下命令是查看test命名空间下的nginx的pod信息。
kubectl describe pod nginx -n test
4.2.4、进入pod的容器中查看日志
pod里运行的其实是docker容器,通过以下命令查看容器日志:
kubectl logs -f nginx -n test
4.2.5、进入pod中的容器中
kubectl exec -it nginx -n test -- bash
4.2.4、删除pod
以下命令就是把default命名空间下的nginx这个pod删除掉
kubectl delete pod nginx -n default
4.3、图形化界面操作Pod
点击默认集群
如下图,找到对应的命名空间:
在进入容器组中,能看到容器的信息:
4.4、Deployment操作
4.4.1、创建一个deployment
方式一
kubectl create deployment deploy-nginx -n test --image=daocloud.io/library/nginx:1.9.1
方式二
通过yml的方式创建管理,更推荐使用这种方式,更方便管理运行。
我们可以到官网摘抄下:
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
首先创建一个deployment-nginx.yml文件
vi deployment-nginx.yml
内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.9.1
ports:
- containerPort: 80
最后运行以下脚本
kubectl apply -f deployment-nginx.yml
4.4.2、查看deployment
kubectl get deploy -n test
4.4.2、删除deployment
kubectl delete deployment deploy-nginx
4.5、图形化界面操作Deployment
4.5.1、查看容器组
在新增一个deployment后,会默认创建一个pod,我们可以到图形化界面看到
到工作负载里能看到deployment:
4.5.2、查看工作负载
进到详情里能看到各种操作按钮
4.5.3、自动伸缩pod
如下操作,可快速的伸缩指定deployment下的pod数量:
再到容器组里看到多了一个pod
4.6、Service操作
4.6.1、创建Service
4.6.1.1、暴露Deployment生成
要想访问deployment,首先我们需要暴露个端口
kubectl expose deployment nginx-deployment --port=8888 --target-port=80 -n test
上面脚本的意思是:将命名空间test里deployment为nginx-deployment对外暴露端口,端口为888,映射到pod容器里的nginx端口80。
上面方式只能在服务器内部访问,在浏览器是无法访问的,如果想外部也能访问,需要加type=NodePort参数:
kubectl expose deployment nginx-deployment --port=8888 --target-port=80 -n test --type=NodePort
暴露了之后,生成对应的service
kubectl get service -n test
图形化界面也能看到
4.6.1.2、通过yml文件创建
创建一个yml文件
vi deployment-service.yml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.9.1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: test
#注意:这里要和Deployment的名称一致
name: nginx-deployment
labels:
app: nginx-deployment
spec:
selector:
#注意:这里要和Deployment的app名称一致
app: nginx
ports:
#Service的端口
- port: 8888
#容器内的端口
targetPort: 80
type: NodePort
执行yml文件
kubectl apply -f deployment-service.yml
执行后可以在图形化界面看到服务了
4.6.2、查看Service
kubectl get service -n test
可以看到Service的ip和端口,请求ip:port,返回nginx信息
curl http://10.96.68.96:8888/
浏览器通过主机ip+外部端口访问:
http://192.168.88.126:30833/
4.7、Ingress操作
4.7.1、安装Ingress
如下图,在集群管理->IngressClass菜单进入安装页面
点击安装弹出如下界面,选择使用私有镜像仓库,点击确定按钮
安装完之后,容器组进入 Succeeded 或 Running 状态之后,IngressNginxController 就可以正常工作。
4.7.2、通过yml创建Ingress
在4.6.1.2步骤中的yml文件追加ingress脚本
vi deployment-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.9.1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: test
#注意:这里要和Deployment的名称一致
name: nginx-deployment
labels:
app: nginx-deployment
spec:
selector:
#注意:这里要和Deployment的app名称一致
app: nginx
ports:
#Service的端口
- port: 8888
#容器内的端口
targetPort: 80
type: NodePort
---
#apiVersion值必须写成networking.k8s.io/v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: test
name: nginx-ingress
spec:
ingressClassName: ingress
rules:
#映射的域名
- host: abc.def.com
http:
paths:
#访问什么样的路径
- path: /
#匹配方式,前缀匹配,即匹配上path配置的斜杠就可以
pathType: Prefix
backend:
#自定用哪个service
service:
name: nginx-deployment
port:
#映射的端口
number: 8888
执行脚本
kubectl apply -f deployment-nginx.yml
4.7.3、配置域名访问
C:\Windows\System32\drivers\etc
192.168.88.126 abc.def.com
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!