kubernetes是docker集群的编排工具
kubernetes的核心功能:
- 自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
- 弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
- 服务的自动发现和负载均衡:不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
- 滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
kubernetes的应用场景
微服务架构中使用
微服务的优点:
能承载更高的并发
业务健壮性,高可用
修改代码,重新编译时间短
持续集成,持续发布
jenkins代码自动上线
kubernetes常用的资源R
pod
Replicationcontroller
pod 是k8s最小的资源单位
- 创建pod资源
在k8s内各种资源的创建都需要一个yaml文件
先创建存放pod 的yaml文件的目录mkdir -p k8s/pod
k8s_pod.yaml
#文件内容与格式主要有四部分
apiVersion: v1 ##api版本
kind: Pod ##资源类型
metadata: ##属性
name: nginx
labels:
app: web
spec: ##详细
containers:
- name: nginx
image: 10.0.0.11:5000/nginx:1.13
ports:
- containerPort: 80
导入一个nginx的镜像
下载地址:
链接:https://pan.baidu.com/s/1yhDRLnfs5qLsTHYhnFtCiQ
提取码:7vs7
导入、打好标签并上传到私有仓库内
docker load -i docker_nginx.tar.gz
docker images
docker tag nginx:latest 10.0.0.11:5000/nginx:latest
docker push 10.0.0.11:5000/nginx:latest
写入一个nginx的yaml文件
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: web
spec:
containers:
- name: nginx
image: 10.0.0.11:5000/nginx:1.13
ports:
- containerPort: 80
使用命令kubectl create -f k8s_pod.yaml
即可创建pod
[root@master pod]# kubectl create -f k8s_pod.yaml
pod "nginx" created
#查看
[root@master pod]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 40s
使用describe查看pod详细信息,可以根据信息解决报错!
[root@master pod]# kubectl describe pod nginx
Name: nginx
Namespace: default
Node: 10.0.0.13/10.0.0.13
Start Time: Sun, 05 Apr 2020 14:48:06 +0800
Labels: app=web
Status: Pending
IP:
Controllers: <none>
Containers:
nginx:
Container ID:
Image: 10.0.0.11:5000/nginx:latest
Image ID:
Port: 80/TCP
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Volume Mounts: <none>
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
2m 2m 1 {default-scheduler } Normal Scheduled Successfully assigned nginx to 10.0.0.13
2m 1m 4 {kubelet 10.0.0.13} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
2m 6s 9 {kubelet 10.0.0.13} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""
根据报错信息:Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"提示说明
nfrastructure:latest
这个镜像死活pull不下来,可以看到他是从 registry.access.redhat.com/rhel7红帽镜像仓库里pull的,既然这个仓库pull不下来,我们可以手动从别的仓库pull下来直接使用,你可以使用在线pull的方法,也可以使用我提供的压缩包直接下载导入
下载地址:链接:https://pan.baidu.com/s/1_clxtHHK3o8w30xrSpg1Sg
提取码:ztnd
导入,打标签推送到仓库
docker load -i pod-infrastructure-latest.tar.gz
docker images
docker tag docker.io/tianyebj/pod-infrastructure:latest 10.0.0.11:5000/pod-infrastructure:latest
docker push 10.0.0.11:5000/pod-infrastructure:latest
既然这个镜像已经有了,为了node节点能正常从仓库获取此资源就需要修改kubelet的配置文件,指定正确的位置
所有节点都需要操作
vim /etc/kubenetes/kubelet
17 KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.11:5000/pod-infrastructure:latest"
改完后重启服务systemctl restart kubelet
最后再来查看master节点pod运行情况:
使用-o wide可以查看更多详细信息
[root@master pod]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 43m 172.16.43.2 10.0.0.12
显示已经运行起来了
最后可以在被调动的node 节点上查看已启动的容器
image.png
尝试访问一下服务:
[root@master pod]# curl -I 172.16.43.2
HTTP/1.1 200 OK
Server: nginx/1.13.6
Date: Sun, 05 Apr 2020 07:35:12 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Thu, 14 Sep 2017 16:35:09 GMT
Connection: keep-alive
ETag: "59baafbd-264"
Accept-Ranges: bytes
pod资源至少有俩个容器组成:
pod基础容器
pod业务容器
最多可能有5个容器:
一个基础容器,四个业务容器,总之容器数是奇数向的
网友评论