前言:
结合此博客加上自己的实操,总结如下:
- 服务器版本: CentOS Linux release 7.9.2009 (Core)
- 安装前准备的1-7 步,安装K8S中的 1-4步,要在三个节点上同时操作
安装前准备
- 部署规划
192.168.8.106 k8s-master
192.168.8.186 k8s-node1
192.168.8.187 k8s-node2
- 修改 hostname
master节点上操作:hostnamectl set-hostname k8s-master
node1节点上操作: hostnamectl set-hostname k8s-node1
node2节点上操作:hostnamectl set-hostname k8s-node2 - 通过 cat /etc/hostname 可查看是否更改成功
- 关闭selinux(临时关闭:输入命令setenforce 0,重启系统后还会开启。)
setenforce 0
永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。
- 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state
4. 设置host
vim /etc/hosts
192.168.8.106 k8s-master
192.168.8.186 k8s-node1
192.168.8.187 k8s-node2
可通过 cat /etc/hosts 查看是否修改成功
- 禁用swap
swapoff -a #临时生效,重启失效
vim /etc/fstab #永久禁用
mount -a # 重新加载生效
- 将桥接的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
7. 安装Docker
备份源
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
修改OS源为阿里的仓库
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装常用命令
yum -y install conntrack ipvsadm ipset jq sysstat curl iptables libseccomp wget lrzsz nmap lsof net-tools zip unzip vim telnet
安装依赖项
yum install -y yum-utils device-mapper-persistent-data lvm2
安装Docker源为阿里
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清理缓存
yum clean all
** 重新生成缓存**
yum makecache
再次查看yum源信息
yum repolist
我们安装18.06.3版本
sudo yum install docker-ce-18.06.3.ce-3.el7
安装完毕后,查看docker 版本信息
docker version
启动Docker,设置开机启动
sudo chkconfig docker on
systemctl start docker
修改Docker镜像仓库为阿里源镜像
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://sv69k1rc.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
https://sv69k1rc.mirror.aliyuncs.com,是小编的阿里源地址,请更换为自己的地址。 修改后刷新daemon.json,重启docker服务使配置生效
systemctl daemon-reload
sudo systemctl restart docker.service
执行完后,可以查看下docker状态及详细信息
service docker status
docker info
安装K8S
- 安装K8S源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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. 导入公钥
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import rpm-package-key.gpg
3. 安装
yum install -y kubelet-1.15.9-0 kubeadm-1.15.9-0 kubectl-1.15.9-0
4. 开机启动 很重要(如不设置,服务重启后,则需要重新启动 k8s)
systemctl enable kubelet && systemctl start kubelet
systemctl status kubelet
执行这个语句 systemctl status kubelet ,虽然有失败信息,不用管,等到后面初始化完成和加载calico.yml后,就好了。
- 初始化K8S集群(在 master 节点上操作)\
kubeadm init --kubernetes-version=v1.15.9 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.88.106 --apiserver-cert-extra-sans=192.168.88.106,k8s-master --image-repository registry.aliyuncs.com/google_containers
192.168.8.106 是 master 的ip地址, 由于小编后期修改过ip地址,请把 192.168.88.XXX 看成 192.168.8.XXX
6. 将当前用户配置为集群管理员(如果不配置,下次连接时会无法使用kubectl)master节点操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7. 安装Calico(master节点上操作)
wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml --no-check-certificate
kubectl apply -f calico.yaml
- 然后到其他两个节点执行如下命令,添加节点到master.(在node1 node2 上操作)
kubeadm join 192.168.88.106:6443 --token xfmjke.mh9e32ocm4kayg41 \
--discovery-token-ca-cert-hash sha256:e22cce363e8d0251785a0920024bd4a4146d64b4b52e58978b0e6c28dc80e09a
9. 加入完毕后,我们用命令kubectl get nodes获取所有节点(master节点上操作,要等上一会才能都是 Ready状态)
kubectl get nodes
验证安装信息
kubectl get componentstatus
检查系统pod状态
kubectl get pods -n kube-system
查看日志的命令: journalctl -f -u kubelet
- 测试K8S集群
这里为了快速地验证一下我们的K8S集群是否可用,创建一个示例Pod:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
32085 是nginx 的访问端口http://192.168.8.106:32085/ http://192.168.8.186:32085/ http://192.168.8.187:32085/ 都能访问nginx:
11. 经过测试 重启服务,也是能直接访问 ngixn的, 说明集群自启动了。