目录
一、基础概念
二、硬件要求
三、环境准备与规划
四、安装docker并添加yum源
4.1 安装docker
4.2 设置docker镜像仓库地址
4.3 设置k8s的YUM源
五、安装kubeadm,kubelet和kubectl
六、部署K8s Master
6.1 kubeadm初始化并下载镜像
6.2 复制配置文件,并授权
6.3 查看节点
七、部署K8s Slave
7.1 master生成token
7.2 从节点加入master
7.3 再次查看节点
八、部署CNI网络插件
九、测试K8s集群
十、卸载k8s
官网 :KubernetesKubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。星际尺度 Google 每周运行数十亿个容器,Kubernetes 基于与之相同的原则来设计,能够在不扩张运维团队的情况下进行规模扩展。处处适用 无论是本地测试,还是跨国公司,Kubernetes 的灵活性都能让你在应对复杂系统时得心应手。永不过时 Kubernetes 是开源系统,可以自由地部署在企业内部,私有云、混合云或公有云,让您轻松地做出合适的选择。将 150+ 微服务迁移到 Kubernetes 上的挑战 Sarah Wells, 运营和可靠性技术总监, 金融时报观看视频 参加 2022 年 10 月 24-28 日的北美 KubeCon 参加 2023 年 4 月 17-21 日的欧洲 KubeCon Kubernetes 特性 自动化上线和回滚 Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。 服务发现与负载均衡 无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。 存储编排 自动挂载所选存储系统,包括本地存储、诸如 AWS 或 GCP 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Ceph、Cinder 这类网络存储系统。 Secret 和配置管理 部署和更新 Secret 和应用程序的配置而不必重新构建容器镜像, 且不必将软件堆栈配置中的秘密信息暴露出来。 自动装箱 根据资源需求和其他限制自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。 批量执行 除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。 IPv4/IPv6 双协议栈 为 Pod 和 Service 分配 IPv4 和 IPv6 地址 水平扩缩 使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。 自我修复 重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。 为扩展性设计 无需更改上游源码即可扩展你的 Kubernetes 集群。 案例分析 "https://kubernetes.io/zh-cn/
1、kubernetes,简称 K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多
个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes
提供了应用部署,规划,更新,维护的一种机制。
2、kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个
kubernetes集群的部署。
(1)创建一个 Master 节点
kubeadm init
(2)将一个 Node 节点加入到当前集群中
kubeadm join
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
(1)一台或多台机器,操作系统 CentOS7.x-86_x64
(2)硬件配置:3GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
(3)可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
(4)禁止swap分区
1、集群规划
node1 192.168.215.140 (master)
node2 192.168.215.141 (slave)
node3 192.168.215.142 (slave)
2、必要环境准备(3台都执行)
(1) 都关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
(2) 都关闭selinux
setenforce 0 # 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
(3) 都关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
(4) 根据规划设置主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
(5) 只在master140添加hosts
cat >> /etc/hosts << EOF
192.168.215.140 node1
192.168.215.141 node2
192.168.215.142 node3
EOF
(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
(7) sysctl --system # 生效
(8) 时间同步
yum install ntpdate -y
ntpdate time.windows.com
(9) 重启所有服务器
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
3台都需要安装docker
1、使用wget命令下载docker-ce.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2、安装docker18.06.1版本
yum -y install docker-ce-18.06.1.ce-3.el7
3、设置开机自启,并启动docker
systemctl enable docker && systemctl start docker
4、查看docker版本
docker --version
设置docker镜像仓库地址为:阿里巴巴的地址,加速镜像下载
3台都需要设置仓库地址
1、创建文件夹
sudo mkdir -p /etc/docker
2、替换镜像仓库地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://p4e9di9t.mirror.aliyuncs.com"]
}
EOF
3、重启docker
systemctl daemon-reload
systemctl restart docker
3台都执行
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
1、安装指定版本的1.18,避免兼容性问题
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
2、设置开机自启
systemctl enable kubelet
1、在192.168.215.140(Master)执行。
2、service-cidr 和 pod-network-cidr 只要是和当前网段不冲突的ip就可以。
3、由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init \
--apiserver-advertise-address=192.168.215.140 \
--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
在 140 master上面继续执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
发现只有master一个节点,并且状态是 “未准备”
把从节点加入到master当中去,从而组成一个集群,所以接下来的操作基本都是在141/142 从节点上面执行的。
在140 master 节点上面执行如下命令,生成token,从而让其他节点加入进来,默认24h有效
kubeadm token create --print-join-command
复制master上面生成的命令,在从节点141/142上面分别执行:
kubeadm join 192.168.215.140:6443 --token bycusu.59ms8jd3eq24762t --discovery-token-ca-cert-hash sha256:27beb79651247a57b6272f27f6e2c6d64085a2130b0103387e4cf0cd2e85e167
kubectl get nodes
在master上面执行该命令,发现节点数量增加了2个
1、在master上面执行该命令,需要等待5-10分钟,若失败,多执行几次
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2、查看详细系统状态 ,需要每个是Running
kubectl get pods -n kube-system
3、查看节点状态,每个node都是reaady
kubectl get nodes
【注】当2和3都是running与ready状态表示cni网络插件已经安装完成
在Kubernetes集群中创建一个pod,验证是否正常运行:master
1、kubectl create deployment nginx --image=nginx
2、kubectl get pod,svc 查看状态是否为running,然后执行第3步暴露端口
3、kubectl expose deployment nginx --port=80 --type=NodePort
4、kubectl get pod,svc 查看映射端口是多少
访问地址:http://192.168.215.140:32491
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum remove kube*