1.前言
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
这个工具能通过两条指令完成一个kubernetes集群的部署:
2. 安装要求
一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止swap分区
3. 实验安排
角色 IP
k8s-master 192.168.91.134
k8s-node1 192.168.91.135
4. 配置三台服务器的环境
4.1 关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
4.2 关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
4.3 关闭swap
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
4.4 设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
4.5 在所有主机添加hosts
cat >> /etc/hosts << EOF
192.168.91.134 k8s-master
192.168.91.135 k8s-node1
EOF
4.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
4.7 服务器做时间同步
yum install ntpdate -y
同步时间
ntpdate ntp.aliyun.com
5. 所有节点安装Docker/kubeadm/kubelet
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
5.1 安装docker
获取docker的阿里云源
安装wget命令
yum -y install wget
获取阿里云的源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
安装docker
yum -y install docker-ce-18.06.1.ce-3.el7
启动docker并设为开机自启
systemctl enable docker && systemctl start docker
查看docker版本
docker --version
配置镜像加速
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
重启docker服务
systemctl restart docker
5.2 编辑阿里云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
5.3 安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
将kubelet设为开机自启,先不启动
systemctl enable kubelet
6. 部署Kubernetes Master
在192.168.91.134 (Master)执行
kubeadm init \
--apiserver-advertise-address=192.168.91.134 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
初始化成功之后出现以下界面
解释
–apiserver-advertise-address集群通告地址
–image-repository 默认镜像地址无法访问,这里指阿里云镜像仓库地址
–kubernetes-version K8s版本,与上面安装的一致
–service-cidr 集群内部虚拟网络,pod统一访问入口
–pod-network-cidr pod网络
执行命令:
拷贝kubectl所需的配置文件:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6.1在node节点执行后node就会加入集群
[root@node1 ~]# kubeadm join 192.168.91.134:6443 --token o8s41y.8v46mwuf39nmai6q \--discovery-token-ca-cert-hash sha256:e2a7f4f11bb2c630aa8569b287b55224f1f3f3c727200a800672d45b92d47c31
Kubeadm init工作流程
1.[preflight]环境检查,拉取镜像
2.[certs]证书生成与kubeconfig文件生成
3.[kubeconfig]kubeconfig文件生成
4.[kubelet-start]启动kubelet
5.[control-plane]静态pod启动master组件,包括了etcd
6.[mark-control-plane]给master节点打一个标签
7.[bootstrap-token]引导kubelet生成证书
8.[addons]安装coredns和kubeproxy生成了用于工作节点连接master的命令
7. 安装Pod网络插件(CNI)
Calico是一个纯三层的数据网络中心方案
下载YAML
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
等待pods状态全部running
kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-79bc685f4c-28nvb 1/1 Running 0 8m12s
calico-node-db4dg 1/1 Running 0 8m12s
calico-node-wfw2m 1/1 Running 0 8m12s
coredns-9d85f5447-k5flv 1/1 Running 0 31m
coredns-9d85f5447-mmz2p 1/1 Running 0 31m
etcd-k8s-master 1/1 Running 0 31m
kube-apiserver-k8s-master 1/1 Running 0 31m
kube-controller-manager-k8s-master 1/1 Running 0 31m
kube-proxy-9gtsv 1/1 Running 0 15m
kube-proxy-kvklr 1/1 Running 0 31m
kube-scheduler-k8s-master 1/1 Running 0 31m
8. 部署 Dashboard
8.1 在master节点上执行命令
Wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
8.2 修改recommended.yaml配置文件
vim recommended.yaml
默认dashbord只能访问集群内部网络,修改Service为NodePort类型,暴露到外部
38 namespace: kubernetes-dashboard
39 spec:
40 ports:
41 - port: 443
42 targetPort: 8443
43 nodePort: 30001
44 selector:
45 k8s-app: kubernetes-dashboard
46 type: NodePort
47 ---
48
49 apiVersion: v1
50 kind: Secret
8.3 在master节点上执行以下命令:
创建service account并绑定默认cluster-admin管理员集群角色:
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
8.4 访问地址:https://nodeip:30001 (注意:用的是https)