今天是是第三篇,接着上一篇继续

首先,通过kubectl可以看到,三个节点都正常运行

[root@k8s-master001 ~]# kubectl  get no
NAME STATUS ROLES AGE VERSION
k8s-master001 Ready master 16h v1.19.0
k8s-master002 Ready master 16h v1.19.0
k8s-master003 Ready master 16h v1.19.0

现在来部署第一个服务,这里以nginx为例

[root@k8s-master001 ~]# kubectl  run  nginx --image=nginx --port=80
pod/nginx created

可以看到,我们再k8s集群上创建了一个nginx应用,然后我们通过如下命令查看状态,发现现在nginx状态为Pending

[root@k8s-master001 ~]# kubectl  get po
NAME READY STATUS RESTARTS AGE
nginx 0/1 Pending 0 7s

现在我们使用 kubectl describe命令来查看更多信息

[root@k8s-master001 ~]# kubectl  describe po nginx
Name: nginx
Namespace: default
Priority: 0
Node: <none>
Labels: run=nginx
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-6gd92 (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
default-token-6gd92:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-6gd92
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 15s 0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
Warning FailedScheduling 14s 0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.

从输出信息可以看到最后两个事件3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.

什么意思呢?什么意思呢?

这个提示表示,没有节点可以接受调度。

为什么会这样呢?

因为我们现在三个节点都是master节点,还没有添加node节点。默认情况下,master打了污点(taint,后续再介绍),master节点不接收调度。

由于我们这里是测试环境,没有多余的机器来作为node节点,可以手动删除master的污点,让master节点接收调度。

通过如下命令可以查看taint信息:

[root@k8s-master001 ~]# kubectl get no -o yaml | grep taint -A 5
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:10:40Z"
- apiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
- address: 10.26.25.20
--
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:30:25Z"
- apiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
- address: 10.26.25.21
--
f:taints: {}
manager: kube-controller-manager
operation: Update
time: "2020-09-10T09:35:43Z"
- apiVersion: v1
fieldsType: FieldsV1
--
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
status:
addresses:
- address: 10.26.25.22

删除污点node-role.kubernetes.io/master,如下所示

[root@k8s-master001 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-
node/k8s-master001 untainted
node/k8s-master002 untainted
node/k8s-master003 untainted

然后现在在看nginx的状态,已经变为ContainerCreating,这表示已经分配到节点,开始创建nginx的pod了

[root@k8s-master001 ~]# kubectl  get po
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 3m11s

使用kubectl get po -o wide查看,现在nginx已经正常运行了,而且可以看到,nginx现在被分配到 k8s-master001节点上,Pod IP是10.244.0.4

[root@k8s-master001 ~]# kubectl  get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 56m 10.244.0.4 k8s-master001 <none> <none>

现在来访问nginx,熟悉的200出现了~~

[root@k8s-master001 ~]# curl -I  10.244.0.4
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:22:41 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT
Connection: keep-alive
ETag: "5f32b03b-264"
Accept-Ranges: bytes

但是如果在非集群节点上访问10.244.0.4,比如在自己的电脑上访问

[~/b/] : curl -I 10.244.0.4
curl: (55) getpeername() failed with errno 22: Invalid argument

现在就来解决这个问题,

1、我们删掉原来创建的nginx pod

[root@k8s-master001 ~]# kubectl  delete po nginx
pod "nginx" deleted

2、创建nginx.yaml文件

[root@k8s-master001 ~]# cat nginx.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
labels:
app: nginx
spec:
serviceName: nginx
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 180
containers:
- name: nginx
image: nginx
imagePullPolicy: Always
ports:
- containerPort: 80
name: port
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: nginx

3、执行kubectl apply -f nginx.yaml部署

[root@k8s-master001 ~]# kubectl  apply -f nginx.yaml
statefulset.apps/nginx created
service/nginx created [root@k8s-master001 ~]# kubectl get po,ep,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-0 1/1 Running 0 24s NAME ENDPOINTS AGE
endpoints/kubernetes 10.26.25.20:6443,10.26.25.21:6443,10.26.25.22:6443 17h
endpoints/nginx 10.244.2.3:80 23s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 17h
service/nginx NodePort 10.106.27.213 <none> 80:30774/TCP 23s

现在能看到,创建了一个名为nginx的service,把nginx默认的80端口映射到了30774

访问集群任意节点的IP:32650,这里是10.26.25.20:30774

在集群节点上访问:

[root@k8s-master001 ~]# curl -I   10.26.25.20:30774
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:53:55 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT
Connection: keep-alive
ETag: "5f32b03b-264"
Accept-Ranges: bytes

在笔记本电脑上访问:

[~/b/wechatimages] : curl -I   10.26.25.20:30774
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Fri, 11 Sep 2020 02:54:24 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 11 Aug 2020 14:50:35 GMT
Connection: keep-alive
ETag: "5f32b03b-264"
Accept-Ranges: bytes

如果还是



可以先行了解kubernetes的pod,endpoint,service等概念。。。后续文章也会陆续讲到。。。

Tips: 更多好文章,请关注首发微信公众号“菜鸟运维杂谈”!!!

容器云平台No.3~kubernetes使用的更多相关文章

  1. 容器云平台No.4~kubernetes 服务暴露之Ingress

    这是容器云平台第四篇,接上一篇继续, 首先kubernetes服务暴露有如下几种方式: NodePort Loadbalance ClusterIP Ingress 本文紧贴第一篇架构图,只介绍Ing ...

  2. 容器云平台No.9~kubernetes日志收集系统EFK

    EFK介绍 EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较常用的日志收集方案,也是官方比较推荐的方案. 通过EFK,可以把集群的所有日志收集到El ...

  3. 容器云平台No.8~kubernetes负载均衡之ingress-nginx

    Ingress 是什么? Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由. 流量路由由 Ingress 资源上定义的规则控制. 可以将 Ingress 配置为服务提供外 ...

  4. 容器云平台No.7~kubernetes监控系统prometheus-operator

    简介 prometheus-operator Prometheus:一个非常优秀的监控工具或者说是监控方案.它提供了数据搜集.存储.处理.可视化和告警一套完整的解决方案.作为kubernetes官方推 ...

  5. Kubernetes容器云平台建设实践

    [51CTO.com原创稿件]Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.伴随着云原生技术的迅速崛起,如今Kubernetes 事实上已经 ...

  6. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  7. 容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

    开篇 最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了.算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件.首先来看下架构图(实在画的太丑 ...

  8. 容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD

    什么是CI/CD 持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每 ...

  9. 【原创】基于Docker的CaaS容器云平台架构设计及市场分析

    基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...

随机推荐

  1. CentOS 7.3安装指南

    下载CentOs 7.3 1.ISO 镜像启动完成后,你机器上会显示如下首屏.在菜单中选择 “Install CentOS 7”并按下回车继续. 2.在安装镜像加载到内存完成后,会显示一个欢迎页面.选 ...

  2. C++ Templates (1.2 模板实参推断 Template Argument Deduction)

    返回完整目录 目录 1.2 模板实参推断 Template Argument Deduction 1.2 模板实参推断 Template Argument Deduction 当调用函数模板(如max ...

  3. 第1章 RDD概念 弹性分布式数据集

    第1章 RDD概念  弹性分布式数据集 1.1 RDD为什么会产生 RDD是Spark的基石,是实现Spark数据处理的核心抽象.那么RDD为什么会产生呢? Hadoop的MapReduce是一种基于 ...

  4. CentOS 桥接网卡配置

    [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 ONBOOT=yes TYPE=Bridge ...

  5. 键盘敲入 A 字母时,操作系统期间发生了什么

    前言 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入A 字母时,操作系统期间发生了什么吗」? 那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输 ...

  6. Kafka工作流程

    Kafka生产过程分析 1 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机 ...

  7. Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContex

    问题描述: 在idea中maven构建web项目,启动Tomcat插件时,出现Failed to start component [StandardEngine[Tomcat].StandardHos ...

  8. War3模型导出

    Wiki https://en.wikipedia.org/wiki/.MDX 教程 http://www.ou99.com/article-25996-1.html http://blog.csdn ...

  9. Inscribed Figures(思维)

    The math faculty of Berland State University has suffered the sudden drop in the math skills of enro ...

  10. 【Maven】maven脚本中的maven.test.skip和skipTests的区别

    命令 两种方式跳过编译 test mvn clean install -DskipTests mvn clean install -Dmaven.test.skip=true -DskipTests, ...