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的使用入门的更多相关文章

  1. Docker K8s基本概念入门

    原文地址:https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79621510 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具 ...

  2. K8s基本概念入门

    序言 没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念. k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非 ...

  3. k8s之helm入门

    1.概述 helm是k8s的另外一个项目,相当于linux的yum,在yum仓库中,yum不光要解决包之间的依赖关系,还要提供具体的程序包,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像 ...

  4. K8s / Kubernetes 从入门到入门

    Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什么是k ...

  5. Kubernetes(K8s)极速入门

    1. 概述 老话说的好:努力学习,努力提高,做一个有真才实学的人. 言归正传,之前我们聊了 如何使用国内的镜像源搭建 kubernetes(k8s)集群 ,今天我们来聊聊如何在 kubernetes( ...

  6. K8S集群入门:运行一个应用程序究竟需要多少集群?

    如果你使用Kubernetes作为应用程序的操作平台,那么你应该会遇到一些有关使用集群的方式的基本问题: 你应该有多少集群? 它们应该多大? 它们应该包含什么? 本文将深入讨论这些问题,并分析你所拥有 ...

  7. k8s概念入门

    k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个 ...

  8. 3、kubernetes应用快速入门190625

    一.kubernetes应用入门 1.kubectl命令 Basic Commands create Create a resource from a file or from stdin. expo ...

  9. 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况

    近几年容器相关的技术大行其道,容器.docker.k8s.mesos.service mesh.serverless等名词相信大家多少都有听过,国内互联网公司无一不接触和使用相关技术. 健康之路早在2 ...

随机推荐

  1. 【网络基础】【TCP/IP】私有IP地址段

    私有IP地址段 Class A:10.0.0.0    - 10.255.255.255 Class B:172.16.0.0  - 172.31.255.255 Class C:192.168.0. ...

  2. pandas时间数据的集成处理

    工作中遇到的一个问题: 统计各地区新能源汽车的充电时长 数据来源是北理新源的单日全球的运行数据. 这里仅统计北上广重庆四个地区的 数据处理的代码就省略了 需要整理好的是4个dataframe(数据已保 ...

  3. GoF23种设计模式之结构型模式之组合模式

    一.概述 将对象组合成树型结构以表示“部分--整体”的层次关系.组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.适用性 1.你想表示对象的部分--整体层次结构的时候. 2.你希望用户忽略组 ...

  4. QT入门学习笔记1:为什么要选QT及QT软件下载

    为什么选择QT? Qt突出的优势: ◆ Qt 是基于 C++ 的一种语言扩展(Extention) C/C++ 目前还是一种很多人都在学习的语言. Qt的好处就在于Qt本身可以被称作是一种 C++ 的 ...

  5. Django之模型---ORM 单表操作

    以上一随笔中创建的book表为例讲解单表操作 添加表记录 方式一 # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.o ...

  6. JAVA基础篇—异常

    五种常见异常 1.NullPointerException 空指针 2.ClassNotFoundException 指定类不存在 3.ArithmeticException运算异常 4.ArrayI ...

  7. cpu位图

    SMP处理器中要用到cpu位图,用来维护系统内CPU的状态信息,具有代表性的有: cpu_possible_map.cpu_online_map.cpu_present_map. static DEC ...

  8. LeetCode(128) Longest Consecutive Sequence

    题目 Given an unsorted array of integers, find the length of the longest consecutive elements sequence ...

  9. Mr. Panda and Crystal HDU - 6007 最短路+完全背包

    题目:题目链接 思路:不难看出,合成每个宝石需要消耗一定的魔力值,每个宝石有一定的收益,所以只要我们知道每个宝石合成的最小花费,该题就可以转化为一个背包容量为初始魔力值的完全背包问题,每个宝石的最小花 ...

  10. luogu3369 【模板】普通平衡树(Treap/SBT) treap splay

    treap做法,参考hzwer的博客 #include <iostream> #include <cstdlib> #include <cstdio> using ...