K8s 入门
中文文档:https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84
小结大白话
Portainer 挺好的,可以GUI管理集群。可以把很多机器(节点)加到 endpoint 中做集群管理;
kubectl run和docker run一样,它能将一个镜像运行起来,我们使用kubectl run来将一个sonarqube的镜像启动起来。
简介
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。那么,问题来了,要运维何用?
k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。
k8s的全生命周期管理
在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。
创建集群的好处就是,统一对外提供接口,无须进行各种复杂的调用;提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。
在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。
k8s有哪些同类产品
对比Apache Mesos& Mesosphere Marathon
什么是容器调度(Description of container schedulers)?
容器调度工具的主要任务就是负责在最合适的主机上启动容器,并且将它们关联起来。它必须能够通过自动的故障转移(fail-overs)来处理错误,并且当一个实例不足以处理/计算数据时,它能够扩展容器来解决问题。
对比OpenStack
Kubernetes是把OpenStack里面的VM换成了容器,但是实现地更漂亮,更精简,更抽象和本质化,用起来也更容易。
Mac 实操k8s
./kubernetes.sh
docker pull portainer/portainer # 可视化 docker
单机版运行
如果仅有一个docker宿主机,则可使用单机版运行,运行以下命令就可以启动了:
» docker run -d -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer-test \
portainer/portainer
1eccf4fdf585935f434221aff5ca01856e3659aa208e1fad91626c610dc9841b
本地需要加 -v /var/run/docker.sock:/var/run/docker.sock,远程的不需要
账户 admin admin123
在有多台Docker的情况下,进行集群管理就十分重要了,Portainer也支持集群管理,Portainer可以和Swarm一起来进行集群管理操作,Swarm搭建参考上文。
本地情况
运行K8S
下载最新的 Docker for Mac 或者 Edge 版本,即可以看到内置的 Kubernetes 集群
如果我们也勾选了 Show system containers 选项,那么使用如下的 Docker 命令,能看到自动安装的 Kubernetes 相关容器
docker container ls --format "table{{.Names}}\t{{.Image }}\t{{.Command}}"
关于各个容器的作用,可以参阅 这里 : https://github.com/kubernetes/kubernetes/tree/master/build
创建 k8s 服务
» kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml
secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
deployment.apps "kubernetes-dashboard" created
service "kubernetes-dashboard" created
服务安装完毕后可以查看部署的容器与服务:
» kubectl get services --namespace kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 7m
kubernetes-dashboard ClusterIP 10.106.47.35 <none> 443/TCP 20s
--- Desktop/k8s » kubectl get deployments --namespace kube-system
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kube-dns 1 1 1 1 7m
kubernetes-dashboard 1 1 1 0 24s
在 Dashboard 启动完毕后,可以使用 kubectl 提供的 Proxy 服务来访问该面板:
$ kubectl proxy
# 打开如下地址:
# http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
编辑 kubernetes-dashboard 服务
kubectl -n kube-system edit service kubernetes-dashboar
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
creationTimestamp: 2019-04-04T11:26:36Z
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
resourceVersion: "919"
selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
uid: 8200fbdb-56cc-11e9-82da-025000000001
spec:
clusterIP: 10.106.47.35
ports:
- port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
运行成功
nohup kubectl proxy --address='0.0.0.0' --port=8888 --accept-hosts='*$'
k8s 集群
docker 集群管理
K8S 跑应用
一、Deployment的概念
K8S本身并不提供网络的功能,所以需要借助第三方网络插件进行部署K8S中的网络,以打通各个节点中容器的互通。
POD,是K8S中的一个逻辑概念,K8S管理的是POD,一个POD中包含多个容器,容器之间通过localhost互通。而POD需要ip地址。每个POD都有一个标签
POD–>RC–>RS–>Deployment (发展历程)
总结创建的过程:
(1)用户通过kubectl创建Deployment
(2)Deployment创建ReplicaSet
(3)ReplicaSet创建Pod
» kubectl run net-test --image=alpine --replicas=2 sleep 36000 #创建名称为net-test的应用,镜像指定为alpine,副本数为2个
deployment.apps "net-test" created
» kubectl get pod -o wide 127 ↵
NAME READY STATUS RESTARTS AGE IP NODE
net-test-5cf9b5998c-cz8tg 0/1 ErrImagePull 0 1m 10.1.0.10 docker-for-desktop
net-test-5cf9b5998c-qqq99 0/1 ContainerCreating 0 1m <none> docker-for-desktop
» kubectl get deployment net-test
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
net-test 2 2 2 0 2m
kubectl get deployment 命令可以查看net-test的状态,输出显示两个副本正常运行。还可以在创建的过程中,通过kubectl describe deployment net-test了解详细的信息。
kubectl describe deployment net-test # 描述信息
kubectl describe replicaset net-test-5cf9b5998c #查看副本集的详细信息kubectl get replicaset #获取副本集信息
» kubectl create -f nginx-deployment.yaml 1 ↵
deployment.apps "nginx-deployment" created
```
kubectl get pod #查看pod在状态,正在创建中,此时应该正在拉取镜像
kubectl describe pod nginx-deployment-6c45fc49cb-62j4d #查看具体某个pod的状态信息
kubectl get pod -o wide #创建成功,状态为Running
kubectl scale deployment nginx-deployment --replicas 5 #对应用的副本数进行扩容,直接指定副本数为5
### 删除 k8s 的服务
```
» kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
net-test 2 2 2 0 23m
nginx-deployment 1 1 1 1 14m
--- k8s/service » kubectl delete deployment net-test 130 ↵
deployment.extensions "net-test" deleted
```
### 创建 k8s 服务 java
``` shell
» kubectl create -f webapp-rc.yaml 1 ↵
replicationcontroller "webapp" created
```
获取Pod的IP地址:
kubectl get pods -l app=webapp -o yaml|grep podIP
直接通过这两个Pod的IP地址和端口号访问Tomcat服务:
curl 172.17.0.2:8080
kubectl create deployment nginx --image=nginx\n
kubectl get deployments
kubectl create service nodeport nginx --tcp 80:80
kubectl get svc
curl localhost:30354

» kubectl delete deployments/nginx services/nginx 1 ↵
deployment.extensions "nginx" deleted
service "nginx" deleted
##
### 其他
获取dashboard token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-token|awk '{print $1}')|grep token:|awk '{print $2}'
node 示例
» docker build -t shliujing/kube-node-demo1:v1 .
## Kubernetes系列之五:使用yaml文件创建service向外暴露服务
使用yaml文件创建Service(NodePort)
» kubectl create -f service.yaml
service "kube-node-service" created

## 参考
- k8s入门(kubernetes)--持续学习更新: https://blog.csdn.net/qq_35559756/article/details/81836814
- 【可操作9分】MAC环境下Docker整合Kubernetes https://blog.csdn.net/WALK_MAN_wubiao/article/details/81351068
- 【有用】Docker(七)----搭建Portainer可视化界面
https://blog.csdn.net/u011781521/article/details/80469804
- kubernetes的dashboard登录方式
https://www.centos.bz/2018/07/kubernetes%E7%9A%84dashboard%E7%99%BB%E5%BD%95%E6%96%B9%E5%BC%8F/
- 【有用】k8s技术预研8--深入掌握Kubernetes Service
https://blog.csdn.net/watermelonbig/article/details/79693962
- k8s部署服务——内部服务关联
https://blog.csdn.net/u010955999/article/details/79448557
- 【已成功】Kubernetes系列之三:部署你的第一个应用程序到k8s集群
https://blog.csdn.net/wucong60/article/details/81458409 , https://blog.csdn.net/wucong60/article/details/81586272
## FAQ
1. 登录不上仪表盘

使用这个版本有跳过,1.10版本的没有跳过,可以在[这里查看版本][1]
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml
2. kube 创建的服务,ping 不通
K8s 入门的更多相关文章
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- k8s入门系列之扩展组件(一)DNS安装篇
DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...
- k8s入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- k8s 入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- 反手来个K8S入门到跑路
layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...
- k8s入门你至少需要会哪些
body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...
- k8s入门之集群搭建(二)
一.准备三台节点 从上篇文章 k8s入门之基础环境准备(一)安装的Ubuntu虚拟机克隆出三台虚拟机,如图所示 启动这三台虚拟机节点,分别做如下配置 虚拟机名称 IP HostName k8sMast ...
- ASP.NET Core on K8S 入门学习系列文章目录
一.关于这个系列 自从2018年底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发现运维工 ...
- k8s入门系列之扩展组件(二)kube-ui安装篇
kube-ui是k8s提供的web管理界面,可以展示节点的内存.CPU.磁盘.Pod.RC.SVC等信息. 1.编辑kube-dashboard-rc.yml定义文件[root@master kube ...
随机推荐
- 解决 win10 新建文件夹重命名卡死的另一种方法
遇到 win10 新建文件夹重命名卡死时 根据网上的各种方法都不起作用时可以试一下这个方法. 文件夹属性 --- 自定义 --- 你想要那种文件夹 优化此文件夹 --- 把 [视频] 改成 [常规项目 ...
- windows环境安装phantomjs和pyspider遇到的问题
1. 安装phantomjs 下载地址:http://phantomjs.org/download.html 解压后将phantomjs.exe文件放到python根目录 2.安装pyspider p ...
- F - JDG HDU - 2112 (最短路)&& E - IGNB HDU - 1242 (dfs)
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...
- 利用 Google Chart API 生成二维码大小不一致
大小不一致是由于 chl 参数内容不一样导致的,而 chs 参数只能指定生成图片的大小,不能指定生成具体二维码大小. 比如:https://chart.googleapis.com/chart?ch ...
- jQuery时间轴插件timeline.js
http://www.jq22.com/jquery-info13695 http://www.jq22.com/jquery-info13357 简要教程 timeline.js是一款jQuery时 ...
- Spring框架xml配置中属性ref与value的区别
1.spring批量扫描mybatis的mapper,使用value 2.spring管理mybatis的单个mapper,用的是ref 虽然引用的是同一个bean,但两个对象的属相类型明显不一样,一 ...
- composer操作简单解析
1. composer配置中国镜像 #使用命令: composer config -e#修改composer.json 添加如下代码 { "repositories": [ { & ...
- python+selenium自动测试之WebDriver的常用API(基础篇二)
本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.常见特殊情况处理如iframe/弹窗处理 有 ...
- PLSQL僵死
同样的SQL语句,同一数据库,但在不同的PLSQL中执行,出现僵死的问题. 修改SQLNET.ORA文件的SQLNET.EXPIRE_TIME值为10,10为默认值.
- Java实现一个简单的循环队列
在某些时候,我们不能被要求像数组一样可以使用索引随机访问,而是需要被限制顺序处理业务,今天介绍一种先进先出(FIFO)的线性数据结构:队列, 当然,还有后进先出(LIFO)的处理方式,即为栈(后续有时 ...