一.K8S 概览
1.K8S是什么
K8S官网文档:https://kubernetes.io/zh/docs/home/
K8S 是Kubernetes的全称,源于希腊语,意为“舵手”或“飞行员”,官方称其是:用于自动部署、扩展和管
理“容器化(containerized)应用程序”的开源系统。翻译成大白话就是:“K8S 是负责自动化运维管理多个Docker 程序的集群”。
2.K8S核心特性
1.服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
2.存储编排:自动挂载所选存储系统,包括本地存储。
3.Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
4.批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
5.水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。
6.自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
7.自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。
8.自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。
3.k8s集群的搭建
搭建K8S集群,准备三台2核4G的虚拟机(内存至少2G以上),操作系统选择用centos 7以上版本,先在三台机器上装好docker
docker的安装参考 : 服务搭建篇(十一) 容器引擎Docker的部署及介绍
最好保持版本的一致 , 在三台机器都执行如下命令
3.1 关闭防火墙
systemctl stop firewalld systemctl disable firewalld
3.2 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭 setenforce 0 # 临时关闭
3.3 关闭swap
swapoff -a # 临时关闭 vim /etc/fstab # 永久关闭 #注释掉swap这行 如下图 systemctl reboot # 重启生效 free -m # 查看下swap交换区是否都为0,如果都为0则swap关闭成功
3.4 设置hostname
hostnamectl set-hostname <hostname>
我的设置如下
第一台 : k8s-master-141
第二台 : k8s-node-142
第三台 : k8s-node-143
3.5 在 k8s-master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF 192.168.154.141 k8s-master-141 192.168.154.142 k8s-node-142 192.168.154.143 k8s-node-143 EOF
3.6 将桥接的IPv4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system #重启生效
3.7 设置时间同步
yum install ntpdate -y ntpdate time.windows.com
3.8 添加k8s yum源
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=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
3.9 如果之前安装过k8s,先卸载旧版本
yum remove -y kubelet kubeadm kubect
3.10 查看可以安装的版本
yum list kubelet --showduplicates | sort -r
3.11 安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
3.12 开机启动kubelet
systemctl enable kubelet systemctl start kubelet systemctl status kubele
3.13 初始化
在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)
kubeadm init --apiserver-advertise-address=192.168.154.141 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
在k8s-master机器上执行如下命令:
#配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看kubectl是否能正常使用
kubectl get nodes
安装 Pod 网络插件
# 下载flannel插件的yml wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 修改kube-flannel.yml中的镜像仓库地址为国内源 sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml # 安装网络插件 kubectl apply -f kube-flannel.yml
在所有k8s node机器执行上图第三个红框里的命令
将node节点加入进master节点的集群里,复制上图第三个红框里的命令执行(执行自己的命令)
kubeadm join 192.168.154.141:6443 --token 3ya97r.noygcitjsdcmksmk --discovery-token-ca-cert-hash sha256:8610a89ef85433a89216141106b389763fa70b26f2653b08e99af296c489e284
3.14 在k8s-master机器执行查看节点命令
kubectl get nodes
补充:如果node节点添加进集群失败,可以删除节点重新添加
要删除 k8s-node-142 这个节点,首先在 master 节点上依次执行以下两个命令
kubectl drain k8s-node-142 --delete-local-data --force --ignore-daemonsets kubectl delete node k8s-node-142
执行后通过 kubectl get node 命令可以看到 k8s-node-142 已被成功删除
接着在k8s-node-142 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来
之后就可以重新执行命令添加到集群
kubeadm reset
4.k8s部署过程踩坑记录
1.error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
2.k8s集群状态全部为NotReady