之前公司有让研究istio,研究istio发现需要docker和k8s(kubernetes),硬生生的用windos搭建,大费了周折也搭建成功了,演示一番没用了,今个有时间也自己买了线上的linux服务器,然后用linux搭建K8s。
不知道大家有没有想过为什么会有K8s出现,为什么k8s和springCloud的功能如此相像,后来一查,有的人说可能慢慢的SC(springCloud)就会淘汰,因为功能基本上大致,但是SC只支持java而k8s可以跨平台,支持多种平台,从这个方面k8s就胜了。
所以k8s确实是一种浪潮,一种管理各种平台服务的可能性。废话不多说了,开始把
yum install -y etcd kubernetes
2.1 安装成功以后,修改docker命令为 vim /etc/sysconfig/docker 找到OPTIONS修改里边参数为
--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry gcr.io
2.2 修改k8s配置文件命令 vim /etc/kubernetes/apiserver 找到KUBE_ADMISSION_CONTROL参数将ServiceAccount删除就可以了
# 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
kubectl run my-nginx --image=nginx --port=80 #运行nginx
kubectl get pod# 查看pod
我的状态已经运行了,最开始我的容器一直是在ContainerCreating,这个应该是和docker有关
可以用如下命令去查找原因 kubectl describe pod “名称”,会查看到有什么错误
我的错误是用这个网址借鉴解决的,可以给大家一个链接https://blog.csdn.net/jacketyding/article/details/89846934,这个错误解决完记得将之前的nginx pod删除,重新运行nginx的镜像运行
另外状态说明可以查看这个链接 https://www.jianshu.com/p/1120911f92a1
然后继续说回来,将nginx service对外暴露,让其可供外访问
kubectl expose deployment/my-nginx --type="NodePort" --port 80
查看服务的一些信息
kubectl describe service/my-nginx
linux本机试一下是否运行成功了,以下图片说明运行成功了,nginx搭建好了
curl 172.18.0.2:80
然后线上测试能访问,线上外网是能访问的,但是另一个windows却一直不能访问,原因是没有设置iptables,将iptables设置转发
iptables -P FORWARD ACCEPT
这样就可以访问了
5.1 创建文件Dockerfile ,命令为touch Dockerfile,编辑Dockerfile,命令vim Dockerfile (前提是用maven或者其他工具已经打完jar包了哦)
5.2 制作镜像
docker build -t app .
5.3 查看镜像是否存在
docker images
6.1 创建k8s-app.yaml文件
apiVersion: v1
kind: Service
metadata:
name: k8s-app
namespace: default
labels:
app: k8s-app
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30002
selector:
app: k8s-app
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s-app
labels:
app: k8s-app
spec:
replicas: 1
selector:
matchLabels:
app: k8s-app
template:
metadata:
labels:
app: k8s-app
spec:
containers:
- name: k8s-app
image: app:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
livenessProbe:
httpGet:
port: 8080
path: /
scheme: HTTP
periodSeconds: 15
initialDelaySeconds: 30
6.2 创建服务
kubectl apply -f k8s-app.yaml
创建这一步的时候可能会出错,要么是yaml排版问题要么是apiVersion问题,有的apiVersion是不支持的,可以看看命令查看自己支持的apiVersion
kubectl api-versions
我的apiVersion就 extensions/v1beta1好使,其他的都报错我也不明白为什么这样哈哈,有这两个就是服务和容器都创建成功了,可以看下pod是否运行,running的状态就是在运行
我们设置对外访问的端口是30002,发现可以访问了