1. k8s 基本认识
2. k8s 的架构
3. 安装 k8s
4. k8s 常用资源
5. k8s 常用的一些命令
一、k8s 基本认识
1.什么是k8s
k8s是一个docker集群的管理工具
k8s是容器的编排工具
2.k8s的核心功能
自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
.
弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
.
服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
.
滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
.
私密配置文件管理: web容器里面,数据库的账户密码(测试库密码)
3.k8s的安装方式
1. yum安装 1.5 最容易安装成功,最适合学习的
2. 源码编译安装---难度最大 可以安装最新版
3. 二进制安装---步骤繁琐 可以安装最新版(企业) shell,ansible,saltstack
4. kubeadm 安装最容易, 网络 可以安装最新版(企业)
5. minikube 适合开发人员体验k8s, 网络
4.k8s的应用场景
最适合用于跑“微服务(有n套架构)”
1.支持更多的并发
2.网站高可用强
3.代码更新快
二、k8s 的架构
三、安装k8s
首先需要准备主机(master节点+node节点)
对每个节点做hosts解析
10.0.0.11 k8s-master
10.0.0.12 k8s-node-1
10.0.0.13 k8s-node-2
1.master节点的操作
(1).安装配置 etcd 数据库
#安装
[root@k8s-master ~]# yum install etcd -y
#配置
[root@k8s-master ~]# vim /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379
#启动并加入开机自启
(2).安装配置 kubernetes-master.x86_64
#安装
[root@k8s-master ~]# yum install kubernetes-master.x86_64 -y
#配置
[root@k8s-master ~]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
[root@k8s-master ~]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://10.0.0.11:8080"
#启动服务并加入开机自启
kube-apiservice、kube-controller-manager、kube-scheduler
#检查服务是否安装正常
[root@k8s-master ~]# kubectl get componentstatus
2.node节点
安装配置 kubernetes-node.x86_64
#安装
[root@k8s-node-1 ~]# yum install kubernetes-node.x86_64 -y
#配置
[root@k8s-node-1 ~]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://10.0.0.11:8080"
[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=10.0.0.12"
KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.11:5000/pod-infrastructure:latest"
#启动服务并加入开机自启
kubelet、kube-proxy
3.所有节点安装配置flannel网络
#安装
yum install flannel -y
#配置
sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld
#master控制节点,设定网络的网段
etcdctl mk /atomic.io/network/config '{ "Network": "172.18.0.0/16" }'
#所有节点都安装并启动docker,启动flannel
#node节点
vim /usr/lib/systemd/system/docker.service
#在[Service]区域下增加一行
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
systemctl daemon-reload
systemctl restart docker
4.配置本地镜像私有仓库
#所有节点
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker
#镜像私有仓库节点
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
四、k8s 常用资源
1.pods
①pod是k8s中的最小资源单位
②pod资源:至少由两个容器组成,pod基础容器和业务容器组成(最多1+4)
pod的yml文件主要组成,注意缩进(两个空格)
apiVersion: v1 api版本
kind: pod 资源类型
metadata: 属性
spec: 详细
2.rc(ReplicationController)
作用:
①保证指定数量的pod资源存活
②通过标签选择器来关联pod
.
滚动升级和一键回滚
1.升级
kubectl rolling-update nginx -f nginx-rc1.15.yaml --update-period=10s
2.回滚
kubectl rolling-update nginx2 -f nginx-rc.yaml --update-period=1s
#依赖于yml文件,升级回滚前后,服务访问会中断,需要修改标签
4.负载 service
①service帮助pod暴露端口
②service默认使用iptables来实现负载均衡, k8s 1.8新版本中推荐使用lvs(四层负载均衡 传输层tcp,udp)
#创建一个service
apiVersion: v1
kind: Service #简称svc
metadata:
name: myweb
spec:
type: NodePort #默认ClusterIP
ports:
- port: 80 #clusterIP
nodePort: 30000 #node port
targetPort: 80 #pod port
selector:
app: myweb2
5.deployment
①有rc在滚动升级之后,会造成服务访问中断,于是k8s引入了deployment资源
②创建deployment是,会创建rs,再由rs创建pod,rs相当于rc的升级版
.
优点:
1.升级服务不中断
2.修改配置文件立即升级(kubectl edit)
3.所有操作都可命令行实现
4.不依赖配置文件升级
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
minReadySeconds: 30
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: 10.0.0.11:5000/nginx:1.13
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
requests:
cpu: 100m
五、k8s 常用的一些命令
1.平时管理资源的命令
# 查看资源
kubectl get
参数:(默认是default命名空间)
pod、deployment、svc、rc
all 查看所有资源
-n 指定命名空间
-o wide 详细显示
# 创建/删除资源
kubectl create/delete -f
参数:
. 读取所有目录下的所有yml,创建/删除资源
*.yml 后面可以跟yml文件,指定创建/删除单个
# 在线修改资源配置
kubectl edit
# 进入pod容器
kubectl exec -it 资源名称 /bin/bash
# 创建命令空间
kubectl create namespace wordpress
# 命令行创建deployment资源,并且创建service暴露端口
kubectl run che --image=nginx:1.13 --replicas=2
kubectl expose deployment che --port=80 --target-port=80 --type=NodePort
#查看资源日志
kubectl logs
-f #实时查看日志
--tail=100 #查看最后100行日志
#查看书写k8s yml文件的帮助 资源名称.具体组件
kubectl explain pod.spec
kubectl explain deploy.spec.template.spec.containers.resources
#调整rc的副本书
kubectl scale rc nginx --replicas=2
2.deployment资源相关命令
#命令行创建deployment
kubectl run nginx --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record
#命令行升级版本
kubectl set image deployment nginx nginx=10.0.0.11:5000/nginx:1.15
#查看deployment所有历史版本
kubectl rollout history deployment nginx
#deployment回滚到上一个版本
kubectl rollout undo deployment nginx
#deployment回滚到指定版本
kubectl rollout undo deployment nginx --to-revision=2
3.远程操作控制节点master
kubectl -s 10.0.0.11:8080 get nodes