什么是kubernetes(k8s)
- k8s是一个docker集群的管理工具
- k8s是容器的编排工具
kubernetes(k8s)的核心功能
- 自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
- 弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量服务的自动发和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
- 滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。私密配置文件管理. web容器里面,数据库的账户密码(测试库密码)
kubernetes(k8s)的几种安装方式
- 源码编译安装—难度最大 可以安装最新版
- 源码编译安装—难度最大 可以安装最新版
- 二进制安装—步骤繁琐 可以安装最新版 shell,ansible,saltstack
- kubeadm 安装最容易, 网络 可以安装最新版
- minikube 适合开发人员体验k8s, 网络
k8s架构:
核心组件
etcd | 存了整个集群的状态 |
apiserver | 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制 |
controller manager | 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等 |
scheduler | 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上 |
kubelet | 负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理 |
Container runtime | 负责镜像管理以及Pod和容器的真正运行(CRI) |
kube-proxy | 负责为Service提供cluster内部的服务发现和负载均衡 |
附加组件Add-ons:
组件名称 | 说明 |
kube-dns | 负责为整个集群提供DNS服务 |
Ingress Controller | 为服务提供外网入口 |
Heapster | 提供资源监控 |
Dashboard | 提供GUI |
Federation | 提供跨可用区的集群 |
Fluentd-Elasticsearch | 提供集群日志采集、存储与查询 |
环境要求:
机器名 | ip地址 | 内存要求 |
kubernetes-master | 10.0.0.11 | 1g |
kubernetes-node1 | 10.0.0.12 | 1g |
kubernetes-node2 | 10.0.0.13 | 1g |
1.修改IP地址、主机和host解析
[root@k8s-master ~]# vim /etc/hosts 10.0.0.11 k8s-master 10.0.0.12 k8s-node-1 10.0.0.13 k8s-node-2
所有节点需要做hosts解析
2.master节点安装etcd
[root@k8s-master yum.repos.d]# yum install -y etcd
#修改etcd.conf配置文件
[root@k8s-master yum.repos.d]# vim /etc/etcd/etcd.conf 6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #监听的地址 21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379" #集群访问此节点的地址 #重启etcd服务并且开机自启动 [root@k8s-master yum.repos.d]# systemctl start etcd.service [root@k8s-master yum.repos.d]# systemctl enable etcd.service #etcd存值 etcdctl set testdir/testkey0 0 #etcd取值 etcdctl get testdir/testkey0 #集群健康状态见擦汗 [root@k8s-master yum.repos.d]# etcdctl -C http://10.0.0.11:2379 cluster-health member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.11:2379 cluster is healthy
3.master节点安装kubernetes
[root@k8s-master yum.repos.d]# yum install kubernetes-master.x86_64 -y
#修改apiserver配置文件
[root@k8s-master yum.repos.d]# vim /etc/kubernetes/apiserver #监听地址 8行: KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" #api监听端口 11行:KUBE_API_PORT="--port=8080" #kubelet监听端口 14行: KUBELET_PORT="--kubelet-port=10250" #etcd集群信息存储位置 17行:KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" #管理员控制策略 23行:KUBE_ADMISSION_CONTROL="--admissioncontrol=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
#修改controller manager和scheduler的配置文件
[root@k8s-master yum.repos.d]# vim /etc/kubernetes/config #指定apiserver地址 22行:KUBE_MASTER="--master=http://10.0.0.11:8080"
#重启修改的配置文件服务
systemctl enable kube-apiserver.service systemctl restart kube-apiserver.service systemctl enable kube-controller-manager.service systemctl restart kube-controller-manager.service systemctl enable kube-scheduler.service systemctl restart kube-scheduler.service
#检查服务是否安装正常
[root@k8s-master yum.repos.d]# kubectl get componentstatus NAME STATUS MESSAGE ERROR etcd-0 Healthy {"health":"true"} scheduler Healthy ok controller-manager Healthy ok
4.node节点安装kubernetes
[root@k8s-node-1 yum.repos.d]# yum install kubernetes-node.x86_64 -y
#修改node-1节点配置文件
[root@k8s-node-1 ~]# vim /etc/kubernetes/config #指定apiserver地址 22行:KUBE_MASTER="--master=http://10.0.0.11:8080"
#修改node-1节点kubelet配置文件
[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet #kubelet监听地址 5行:KUBELET_ADDRESS="--address=0.0.0.0" #kubelet监听端口 8行:KUBELET_PORT="--port=10250" #kubelet名字 11行:KUBELET_HOSTNAME="--hostname-override=10.0.0.12" #指定apiserver地址 14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"
#重启修改配置文件服务
systemctl enable kubelet.service systemctl restart kubelet.service systemctl enable kube-proxy.service systemctl restart kube-proxy.service
#在master节点检查
[root@k8s-master yum.repos.d]# kubectl get node NAME STATUS AGE 10.0.0.12 Ready 15m 10.0.0.13 Ready 19s
5.所有节点配置flannel网络
[root@k8s-master ~]# yum install flannel -y
#修改flannel信息存储在etcd的ip地址
[root@k8s-master ~]# sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld
##master节点设置flannel网络范围并安装docker:
[root@k8s-master ~]# etcdctl mk /atomic.io/network/config '{ "Network":"172.18.0.0/16" }'
[root@k8s-master ~]# yum install docker -y
[root@k8s-master ~]# systemctl enable flanneld.service
[root@k8s-master ~]# systemctl restart flanneld.service
[root@k8s-master ~]# systemctl restart docker
[root@k8s-master ~]# systemctl enable docker
[root@k8s-master ~]# systemctl restart kube-apiserver.service
[root@k8s-master ~]# systemctl restart kube-controller-manager.service
[root@k8s-master ~]# systemctl restart kube-scheduler.service
#当docker启动时加载会flannel.conf并且生成网段
[root@k8s-master ~]# cat /usr/lib/systemd/system/docker.service.d/flannel.conf
[Service]
EnvironmentFile=-/run/flannel/docker
[root@k8s-master ~]# cat /run/flannel/docker
DOCKER_OPT_BIP="--bip=172.18.3.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=172.18.3.1/24 --ip-masq=true --mtu=1472"
##所有node节点:
systemctl enable flanneld.service
systemctl restart flanneld.service
systemctl restart docker
systemctl restart kubelet.service
systemctl restart kube-proxy.service
#在所有node节点[Service]区域下增加一行
作用:使得跨宿主机之间容器可以通讯
[root@k8s-node-1 ~]# vim /usr/lib/systemd/system/docker.service
ExecStartPost=/usr/sbin/Iptables -P FORWARD ACCEPT
[root@k8s-node-1 ~]# systemctl daemon-reload
[root@k8s-node-1 ~]# systemctl restart docker
#flannel安装完成之后会多出一块网卡并与docker同一网段
6.配置master为镜像仓库
#所有节点 vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["10.0.0.11:5000"] } systemctl restart docker #master节点 [root@k8s-master ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry #上传镜像测试 [root@k8s-node-2 ~]# docker tag alpine:latest 10.0.0.11:5000/alpine:latest [root@k8s-node-2 ~]# docker push 10.0.0.11:5000/alpine:latest The push refers to a repository [10.0.0.11:5000/alpine] 1bfeebd65323: Pushed latest: digest: sha256:57334c50959f26ce1ee025d08f136c2292c128f84e7b229d1b0da5dac89e9866 size: 528
微信赞赏
支付宝赞赏