kubernetes介绍
容器编排部署工具:
docker三剑客:
(1)docker machine
(2)docker compose
(3)docker swarm
mesos+marathon:
(1)mesos作用于分布式计算过程中,对计算机资源进行管理和分配
(2)marathon基于mesos的私有PaaS,实现了服务发现和负载均衡、为部署提供REST API服务、授权和SSL、配置约束等功能。
(3)mesos和Marathon的关系:mesos如操作系统的内核,负责资源调度,marathon类比服务管理系统,用来管理应用的状态信息。marathon将应用程序部署为长时间运行的mesos任务。
kubernetes
Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
kubernetes功能
• k8s能方便地管理跨机器运行容器化的应用
• 提供应用部署、维护、扩展机制
• 集群管理、安全防护、准入机制、 应用支撑、服务注册、服务发现、智能负载均衡、故障发现、自我修 复、服务滚动升级、在线扩容、资源配额管理
• 使用Docker对应用程序包装、实例化、运行
• 以集群的方式运行、管理跨机器的容器
• 解决Docker跨机器容器之间的通讯问题
• k8s的自我修复机制使得容器集群总是运行在用户期望的状态
k8s集群的安装部署
基本条件:
1 ) 集群中所有机器之间网络互通。
2 ) 可以访问外网,需要拉取镜像。
3 ) 禁止swap分区,可选。
4 ) 集群中所有机器时间同步
k8s-master与k8s-node配置:
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.55 k8s-master
192.168.16.44 k8s-node01
[root@k8s-master ~]# systemctl stop firewalld
[root@k8s-master ~]# sed -i '/SELINUX= /cSELINUX=disabled' /etc/selinux/config
[root@k8s-master ~]# setenforce 0
[root@k8s-master ~]# swapoff -a #临时
[root@k8s-master ~]# free -m
total used free shared buff/cache available
Mem: 5805 196 5468 11 140 5407
Swap: 0 0 0
[root@k8s-master ~]# sed -i '/\/dev\/mapper\/centos-swap/ s/^/#/' /etc/fstab
# 永久
[root@k8s-master ~]# vim /etc/fstab
[root@k8s-master ~]# yum install bash-completion wget tree psmisc net-tools vim lrzsz dos2unix -y
[root@k8s-master ~]# cat >> /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> vm.swappiness = 0
> EOF
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
[root@k8s-master ~]# yum -y install ipset ipvsadm
[root@k8s-master ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF
[root@k8s-master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
#授权、运行、检查是否加载
安装docker-ce
[root@k8s-master ~]yum install -y yum-utils device-mapper-persistent-data lvm2
安装必要的一些系统工具
[root@k8s-master ~]yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加软件源信息
[root@k8s-master ~]yum makecache fast
[root@k8s-master ~]yum makecache fast
更新并安装Docker-CE
[root@k8s-master ~]yum list docker-ce.x86_64 --showduplicates | sort -r
[root@k8s-master ~]# docker version
查看docker-ce版本
修改docker-ce服务配置文件
修改其目的是为了后续使用/etc/docker/daemon.json来进行更多配置
[root@k8s-master ~]vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
#如果原文件此行后面 有-H选项,请删除-H(含)后面所有内容。
注意:有些版本不需要修改,请注意观察,本文安装版本就不需要修改。
#在/etc/docker/daemon.json添加如下内容
[root@k8s-master ~]mkdir -p /etc/docker
[root@k8s-master ~]vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"]
}
[root@k8s-master ~]# systemctl enable --now docker.service
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
启动服务
使用kubeadm安装K8S集群
1、配置kubernetes仓库
[root@k8s-master ~]cat > /etc/yum.repos.d/kubernetes.repo << EOF
>[kubernetes]
>name=Kubernetes
>baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
>enabled=1
>gpgcheck=1
>repo_gpgcheck=1
>gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
>EOF
2、安装docker、kubelet、kubeadm、kubectl
[root@k8s-master ~] yum -y install kubeadm kubelet kubectl
kubelet:负责管理pods和它们上面的容器,维护容器的生命周期
kubeadm:安装K8S工具
kubectl:K8S命令行工具
3、主要配置kubelet,如果不配置可能会导致k8s集群无法启动。
[root@k8s-master ~]vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
4、启动服务
[root@k8s-master ~]systemctl enable kubelet.service
#设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动。
初始化kubernetes master节点
1、查看安装的docker版本
[root@k8s-master ~]# docker version
2、使用kubeadm init初始化(注意重新开个会话窗口,该命令含有之后操作的命令)
[root@k8s-master ~]#kubeadm init --apiserver-advertise-address=192.168.16.55 --token-ttl 0 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.3 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16
3、准备集群管理文件,初始化命令成功后,创建.kube目录
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
4、验证
[root@k8s-master ~]# ss -nutlp | grep :6443
tcp LISTEN 0 128 [::]:6443 [::]:* users:(("kube-apiserver",pid=9933,fd=7))
5、使用kubectl命令查询集群信息
查询组件状态信息
[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
controller-manager Unhealthy Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
etcd-0 Healthy {
"health":"true"}
发现两处报错
解决办法:
针对通过kubeadm安装的k8s集群获取kube-scheduler和kube-controller-manager组件状态异常处理,kubernetes版本:v1.19.3 确认kube-scheduler和kube-controller-manager组件配置是否禁用了非安全端口配置文件路径:
修改:/etc/kubernetes/manifests/kube-scheduler.yaml、
/etc/kubernetes/manifests/kube-controller-manager.yaml
可以去掉--port=0这个设置,
然后重启systemctl restart kubelet,
再次检查正常
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-scheduler.yaml
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {
"health":"true"}
6、查询集群节点信息(因为还没有部署好flannel,所以节点显示为NotReady)
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 24m v1.19.4
7、部署网络插件calico
(1)可以将下载好的镜像导入
[root@k8s-master ~]# docker load -i calico-cni.tar
[root@k8s-master ~]# docker load -i calico-node.tar
[root@k8s-master ~]# docker load -i pod2daemon-flexvol.tar
[root@k8s-master ~]# docker load -i kube-controllers.tar
[root@k8s-master ~]# kubectl get ns
NAME STATUS AGE
default Active 44m
kube-node-lease Active 44m
kube-public Active 44m
kube-system Active 44m
(2)修改calico资源镜像
添加以下两行,增加到606行后面,由于calico自身网络发现机制有问题,因为需要修改calico使用的物理网卡
[root@k8s-master ~]# ip a
查看自己物理网卡
[root@k8s-master ~]# vim calico.yml
607 - name: IP_AUTODETECTION_METHOD
608 value: "interface=ens.*"
(3)在应用caclico资源清单文件之前,需要把calico所有的镜像导入到node节点中。
复制镜像到其他节点
[root@k8s-master ~]# scp calico* pod2daemon-flexvol.tar kube-controllers.tar k8s-node01:/root
结点导入镜像
[root@k8s-node01 ~]# docker load -i calico-cni.tar
[root@k8s-node01 ~]# docker load -i calico-node.tar
[root@k8s-node01 ~]# docker load -i pod2daemon-flexvol.tar
[root@k8s-node01 ~]# docker load -i kube-controllers.tar
8、部署calico(master与node有配置)
[root@k8s-master ~]# kubectl apply -f calico.yml
9、查询集群节点信息(节点显示为Ready)
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 61m v1.19.4
初始化kubernetes node节点
该命令是master初始化完成后,下边有提示的操作命令
[root@k8s-node01 ~]#kubeadm join 192.168.16.55:6443 --token 88913n.ztx29esfmpdlf8qs \
--discovery-token-ca-cert-hash sha256:257735362b59d17a552266d463cc67fe86178a8aa02acd92982a3a8ca3d00ff7
kubernetes master验证
查询节点的镜像
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 21m v1.19.4
k8s-node01 NotReady <none> 34s v1.19.4
[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {
"health":"true"}
[root@k8s-master ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.16.55:6443
KubeDNS is running at https://192.168.16.55:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
kube-proxy 开启 ipvs
[root@k8s-master ~]# kubectl get configmap kube-proxy -n kube-system -o yaml > kube-proxy-configmap.yaml
[root@k8s-master ~]# sed -i 's/mode: ""/mode: "ipvs"/' kube-proxy-configmap.yaml
[root@k8s-master ~]# kubectl apply -f kube-proxy-configmap.yaml
[root@k8s-master ~]# rm -f kube-proxy-configmap.yaml
[root@k8s-master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
[root@k8s-master ~]# kubectl get pods -n kube-system
在k8s-master上部署 kubernetes-dashboard
yaml文件地址:https://github.com/pythonTaotao/kubernetes/tree/master/dashboard
1、下载yaml文件
[root@k8s-master ~]# wget -c https://github.com/pythonTaotao/kubernetes/blob/master/dashboard/dashboard-adminuser.yaml
2、修改node为NodePort模式
[root@k8s-master ~]# vim kubernetes-dashboard.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort # 增加内容
ports:
- port: 443
targetPort: 8443
nodePort: 30000 # 增加内容
selector:
k8s-app: kubernetes-dashboard
type: NodePort
---
3、安装dashboard
[root@k8s-master ~]# kubectl apply -f kubernetes-dashboard.yaml
[root@k8s-master ~]# kubectl get pods -A -o wide | grep kubernetes-dashboard
kubernetes-dashboard dashboard-metrics-scraper-6f5d46bdf4-qzxk9 1/1 Running 0 63s 10.224.85.194 k8s-node01 <none> <none>
kubernetes-dashboard kubernetes-dashboard-59b4cc6b65-bp7zw 1/1 Running 0 63s 10.224.85.193 k8s-node01 <none> <none>
4、创建dashboard管理用户
[root@k8s-master ~]# kubectl apply -f dashboard-adminuser.yaml
[root@k8s-master ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') | awk '/token:/ {print $2}'
eyJhbGciOiJSUzI1NiIsImtpZCI6ImZ1bGk4OXJrLWdZdEVEVnUxLTF5N2FzZjBXV0hWdFN3YmpKUkJnUVJYclUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLW45ZnFmIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyMDM0MmE3ZS04MTU5LTRkZTQtYmIwNS04Y2NjY2FjYjQwYTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.QCp56y9PxEvl8vRWIh7Ce4ctqfhIP8J_o-muuj3y96zeLeamZJ62TWmhxWUSboBUQgMNayxglBn5dUSVw0HbiIp0H6-_LvRESYvgDiaEbiCvfP5CmYoSMdEZ_n0fqNNv3cGKg8t-m4swGy_1qgLyx79egO31SQUm1r_jf0BFF-KCMtSNAKnhycBBE6hfiDfCLJamuMsYwHLIOIsfeGK_iULdNcpRfDQrePIWr9SJfW2SUMqYoFA4ja5MhHbpu3BKND-gsfps0zql_v16Bdr4Qg5dltiUvhD1RcF_E3REl58kmpAWjR9wQGs8y2HpbgWtuvsUGb6Z2PC0pku4Y16HBA
web登录
https://192.168.16.55:30000
输入token登录后
可参考Kuboard管理工具,
https://kuboard.cn/