k8s的使用入门
1.kubectl命令就是apiserver的客户端工具,可以实现对nodes资源的增删改查.
- # 描述一个节点的信息
- kubectl describe node k8s-node1
- # 查看k8s集群信息
- kubectl cluster-info
- # 创建并运行pod
- # --image:表示docker官网的镜像名称
- # --replicas:表示创建并启动几个Pod,不写默认就是1个
- # --dry-run:表示并不真正执行,去掉这个参数就会启动pod
- kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
- kubectl run --generator=deployment/apps.v1 # 被强烈反对并且将来会移除这个参数,可以使用:
- kubectl run --generator=run-pod/v1 or kubectl create instead
- kubectl get deployment
- # 1/1表示这个pod里面有一个容器,并且都准备好了,RESTARTs=0表示没有被重启过
- kubectl get pod
- kubectl get pods -o wide
- NAME READY STATUS RESTARTS AGE IP NODE
- nginx-deploy-84cbfc56b6-w9n4j 1/1 Running 0 4h26m 10.244.2.2 k8s-node2
- # 可以看到nginx在node2节点上运行着,ip地址是10.244.2.2,使用的是node2节点上cni0的地址
- # 在集群内均可访问这个地址,k8s之外是无法访问
- curl -I 10.244.2.2
- # 删除pod,控制器管理pod,删除正在运行的pod,控制器会马上再创建一个新的
- kubectl delete pods nginx-deploy-84cbfc56b6-w9n4j
2.发布端口
- # 缩写:pod(po),service(svc),replicationcontroller(rc),deployment(deploy),replicaset(rs)
- # 起名时注意:以小写字母、数字、字符或'-'组成,不能有下划线
- # 给这个控制器下的pod创建一个service,名字叫my-nginx
- # service的端口(--port)是80,映射到nginx-deploy pod的端口(--target-port)端口是80
- kubectl expose deployment nginx-deploy --name=my-nginx --port=80 --target-port=80 --protocol=TCP
- kubectl get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d11h
- my-nginx ClusterIP 10.111.172.213 <none> 80/TCP 31s
- # service生成iptables访问规则,把cluster ip对应的地址和port都调度至标签选择器关联到的各pod端
- kubectl describe svc my-nginx
- Name: my-nginx
- Namespace: default
- Labels: run=nginx-deploy # 哪个pod是这个标签,my-nginx就会映射到这个pod上
- Annotations: <none>
- Selector: run=nginx-deploy
- Type: ClusterIP
- IP: 10.111.172.213
- Port: <unset> 80/TCP
- TargetPort: 80/TCP
- Endpoints: 10.244.2.2:80 # 结束点:具体到pod
- Session Affinity: None
- Events: <none>
- # 查看各pod的标签
- kubectl get pods --show-labels
3.DNS解析
- # 查看coredns
- kubectl get pods -n kube-system -o wide | grep coredns
- kubectl get svc -n kube-system
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 7d16h
- yum -y install bind-utils
- # 起一个busybox,查找完整域名
- kubectl run client --image=busybox --replicas=1 -it --restart=Never
- If you don't see a command prompt, try pressing enter.
- / # cat /etc/resolv.conf
- nameserver 10.96.0.10
- search default.svc.cluster.local svc.cluster.local cluster.local
- options ndots:5
- # 使用集群内部DNS解析my-nginx的域名
- dig -t A my-nginx.default.svc.cluster.local @10.96.0.10
- my-nginx.default.svc.cluster.local. 5 IN A 10.111.172.213
- # service用于为pod提供固定访问入口,所以不管pod怎么变,svc实现了"一次创建,永久使用"
- # 在刚才那个busybox中可以使用域名访问到nginx
- wget -O - -q my-nginx
4.动态升级;手动修改svc的参数
- # 控制器deployment也是通过标签选择器来管理Pod的
- kubectl describe deployment nginx-deploy
- # 动态修改replicas副本的数量
- kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
- kubectl get deployment -w # 监控,不会退出
- # 动态扩展副本数量为5个
- kubectl scale --replicas=5 deployment myapp
- # 缩减为3个
- kubectl scale --replicas=3 deployment myapp
- # 创建service
- kubectl expose deployment myapp --name=svc-myapp --port=80
- # 在busybox内部访问svc-myapp,可看到轮询的效果
- wget -O - -q svc-myapp/hostname.html
- # 可以看到这个pod中的容器名为myapp
- kubectl describe pods myapp-9b4987d5-9sxgs
- # 动态升级pod版本,第一个myapp是控制器名,第二个myapp是该控制器下的pod的容器名
- kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
- # 动态查看更新状态
- kubectl rollout status deployment myapp
- # 回滚pod至指定版本,不指定版本表示回滚到上一个版本
- kubectl rollout undo deployment myapp:v1
- # 在iptables中可看到service就是一条规则
- iptables -vnL -t nat
- # 想要在集群外部访问pod,把type: ClusterIP改成NodePort
- kubectl edit svc svc-myapp
- kubectl get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d17h
- svc-myapp NodePort 10.102.101.70 <none> 80:30515/TCP 2h
此时这个svc会让node节点开一个端口,监听在30515上,访问http://10.0.0.20:30515/或http://10.0.0.30:30515/都可以得到nginx页面,如果想把type: NodePort改成ClusterIP,出了什么错的话,配置文件的最上面会有提示.
参考博客:http://blog.itpub.net/28916011/viewspace-2213635/
k8s的使用入门的更多相关文章
- Docker K8s基本概念入门
原文地址:https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79621510 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具 ...
- K8s基本概念入门
序言 没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念. k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非 ...
- k8s之helm入门
1.概述 helm是k8s的另外一个项目,相当于linux的yum,在yum仓库中,yum不光要解决包之间的依赖关系,还要提供具体的程序包,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像 ...
- K8s / Kubernetes 从入门到入门
Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什么是k ...
- Kubernetes(K8s)极速入门
1. 概述 老话说的好:努力学习,努力提高,做一个有真才实学的人. 言归正传,之前我们聊了 如何使用国内的镜像源搭建 kubernetes(k8s)集群 ,今天我们来聊聊如何在 kubernetes( ...
- K8S集群入门:运行一个应用程序究竟需要多少集群?
如果你使用Kubernetes作为应用程序的操作平台,那么你应该会遇到一些有关使用集群的方式的基本问题: 你应该有多少集群? 它们应该多大? 它们应该包含什么? 本文将深入讨论这些问题,并分析你所拥有 ...
- k8s概念入门
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个 ...
- 3、kubernetes应用快速入门190625
一.kubernetes应用入门 1.kubectl命令 Basic Commands create Create a resource from a file or from stdin. expo ...
- 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况
近几年容器相关的技术大行其道,容器.docker.k8s.mesos.service mesh.serverless等名词相信大家多少都有听过,国内互联网公司无一不接触和使用相关技术. 健康之路早在2 ...
随机推荐
- Linux实现内容分发的主备模式的智能DNS
BIND实现智能DNS的原理是通过view的方式,首先判断客户请求的来源,然后返回不同的IP 规划:为za.com域进行智能解析 分2个网段,192.168.1.0/24网段的请求解析到192.168 ...
- LA 7048 Coprime 莫比乌斯反演
题意: 给出\(n(n \leq 10^5)\)个数字\(a_i(a_i \leq 10^5)\),从中选出\(3\)个数,使得这\(3\)个数两两互质或者两两不互质 分析: 可以说这是<训练指 ...
- css 透明度使用
设置元素整体透明度: div{ opacity: 0.5; } 设置背景色透明度 div{ background: rgba(0,0,0,0.5); }
- Linux入门(一)
Linux安装的注意问题: 关键的两点: 1)为Linux操作系统准备硬盘空间: 2)启动ISO镜像文件中的安装程序. 前期准备: 1.硬盘分区魔术师 2.grub 纯DOS环境 3.Ub ...
- Selenium WebDriver-actionchain模拟鼠标右键操作
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- 常用软件URL
1.MSDN:https://msdn.itellyou.cn/ 2.软碟通(UltraISO)http://rj.baidu.com/soft/detail/11522.html?ald Ultra ...
- Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',
1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...
- csrf 攻击及防御
1.什么是CSRF攻击: CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:C ...
- python踩坑系列——报错后修改了.py文件,但是依然报错
一开始.py文件中的函数名大小写错了,但是在终端是对的,报错: 'module' object has no attribute '某函数名' 后来就去修改.py文件.结果重新import该.py文件 ...
- Set容器——TreeSet及常用API
TreeSet及常用Api ① TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快; ② 在存储了大量的需要进行快速检索的排序信息的情况下,TreeSe ...