1.实验环境
主机名(IP) 服务
server1(172.25.70.1) harbor仓库
server2(172.25.70.2) master
server3(172.25.70.3) node1
server4(172.25.70.4) node2
内存需要大于2G
master至少要有两cpu
关闭上述主机的防火墙,selinx,设置每台主机可以上网
server1私有仓库在docker篇已经做好,这里只需重新启动
2.具体步骤
1.时间同步
集群管理都需要同步时间(同一母盘封装的虚拟机则不需要,时间本来就是同步的),在这里作出演示。
在真机上外网同步aliyun的时间,虚拟机内网同步真机时间
vim /etc/chrony.conf
systemctl start chronyd.service
chronyc sources -v
yum install chrony.x86_64 -y
vim /etc/chrony.conf
#第3行添加
server 172.25.70.250 iburst #真机ip
systemctl start chronyd.service
systemctl enable --now chronyd
chronyc sources -v
2.建好私有仓库,并保证所有节点都可正常访问私有仓库。
做好master对node的免密访问
。
ssh-keygen
ssh-copy-id server3
ssh-copy-id server4
3.所有主机添加k8s的yum源
可以使用阿里云提供的k8s源:阿里云k8s地址
4.所有节点安装k8s的相应软件,并让docker和kubelet开机自启
yum install -y kubelet kubeadm kubectl
#kubeadm: 用来初始化集群的指令。 kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。 kubectl: 用来与集群通信的命令行工具。
systemctl start docker
systemctl enable --now docker
systemctl start kubelet
systemctl enable --now kubelet
5.默认docker 的驱动是cgroup 更改docker的驱动为 systemd,与k8s一致
修改方式可以参考k8s官方文档:
修改docker驱动
vim /etc/docker/daemon.json
添加:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
systemctl daemon-reload
systemctl restart docker
6.所有节点关闭交换分区,保证在物理内存中运行
swapoff -a
vim /etc/fstab 注释swap 开机不启动
kubeadm config print init-defaults # 初始化信息
kubeadm config images list #查看默认仓库
所以从aliyun上下载镜像,然后导入私有仓库,让其他主机从私有仓库中下载
sever1上启动私有仓库 server2登陆仓库,上传镜像
docker images |grep registry.aliyuncs.com
docker images |grep registry.aliyuncs.com|awk '{print $1":"$2}'
for i in `docker images |grep registry.aliyuncs.com|awk '{print $1":"$2}'|awk -F / '{print $3}'`;do docker tag registry.aliyuncs.com/google_containers/$i westos.org/k8s/$i;done
for i in `docker images |grep westos.org/k8s|awk '{print $1":"$2}'`;do docker push $i ;done
docker pull westos.org/k8s/kube-proxy:v1.18.2
for i in `docker images |grep registry.aliyuncs.com/google_containers|awk '{print $1":"$2}'`;do docker rmi $i ;done
8.master节点初始化,选择一个 Pod 网络模型,并检查是否在 kubeadm 初始化过程中需要传入什么参数。设置 --Pod-network-cidr 来指定网络驱动的 CIDR。
使用Flannel模型 因为从私有仓库下载镜像,所以要指定版本,不然会报错
主节点初始化
kubelet --version #查看版本
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository westos.org/k8s --kubernetes-version=v1.18.2
token用来校验客户端的合法性 hash用来校验server端 token有时间限制,如果过期再create 创建
其它节点加入
kubeadm join 172.25.70.2:6443 --token 30q7ha.3rbur4fhoy8j12nw \
--discovery-token-ca-cert-hash sha256:4db083ac2b5b9c4175219731ddef3fd4887391d240325582d6256813880c2a82
useradd kubeadm
visudo
su - kubeadm
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
kubectl get pod -n kube-system
echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc
kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pod -n kube-system -o wide #看到pod运行在哪个节点