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. opencv和numpy的安装

    近日,学姐让我们切割图片,查了一下资料,发现我需要安装opencv和numpy.但是在安装过程中却出现了很多小问题,我在此结合自和自己的安装经验和网上查找的资料,做一个笔记. 1.opencv的安装 ...

  2. POJ - 3660 Cow Contest(传递闭包)

    题意: n个点,m条边. 若A 到 B的边存在,则证明 A 的排名一定在 B 前. 最后求所有点中,排名可以确定的点的个数. n <= 100, m <= 4500 刚开始还在想是不是拓扑 ...

  3. hbase问题总结

    一.客户端访问hbase时出现no further information 使用java api访问hbase时,一直连不上,查看日志发现以下错误: java.net.ConnectException ...

  4. HDU 3727 Jewel 主席树

    题意: 一开始有一个空序列,然后有下面四种操作: Insert x在序列尾部加入一个值为\(x\)的元素,而且保证序列中每个元素都互不相同. Query_1 s t k查询区间\([s,t]\)中第\ ...

  5. POJ 3281 网络流 拆点 Dining

    题意: 有F种食物和D种饮料,每头牛有各自喜欢的食物和饮料,而且每种食物或者饮料只能给一头牛. 求最多能有多少头牛能同时得到它喜欢的食物或者饮料. 分析: 把每个牛拆点,中间连一条容量为1的边,保证一 ...

  6. luogu2951 noip2017 小凯的疑惑

    在考场上我们可以打表发现规律是 $ ab-a-b $ .下面给出证明(看的网上的). 若有正数 $ x $ 不能被 $ a $ , $ b $ 组合出,假设 $ a>b $ ,则存在 \[ x= ...

  7. 九度oj 题目1455:珍惜现在,感恩生活

    题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...

  8. 【Luogu】P3358最长k可重区间集问题(费用流)

    题目链接 这题费用瘤,数据貌似还是错的. 把线段抽象抽象拆成两个点,入点表示左端,出点表示右端,连上容量为1费用-长度的边. 不相交线段随便连下,源点向拆出的原点S'连费用为0容量k,然后跑费用流. ...

  9. [luoguP1963] [NOI2009]变换序列(二分图最大匹配)

    传送门 根据公式xjb推一下,然后就可以连边. 考虑到字典序最小,和匈牙利算法的实现过程,要倒序匹配. #include <cmath> #include <cstdio> # ...

  10. gulpfile.js备份

    var gulp = require('gulp'); var uglify = require('gulp-uglify'); // var rename = require('gulp-renam ...