前置条件: 安装docker
1.修改三台机器的hostname及hosts文件
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
cat >>/etc/hosts<<EOF
192.168.135.129 k8s-master
192.168.135.130 k8s-node1
192.168.135.131 k8s-node2
EOF
2.关闭防火墙和关闭SELinux
systemctl stop firewalld
systemctl disable firewalld
3.设置系统参数
设置允许路由转发,不对bridge的数据进行处理
创建文件
vi /etc/sysctl.d/k8s.conf
内容如下:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
执行文件
sysctl -p /etc/sysctl.d/k8s.conf
4.kube-proxy 开启ipvs的前置条件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
5.所有节点关闭swap
swapoff -a 临时关闭
vi /etc/fstab 永久关闭
注释掉以下字段
/dev/mapper/cl-swap swap swap defaults 0 0
6.安装kubelet、kubeadm、kubectl
kubeadm: 用来初始化集群的指令。
kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。
kubectl: 用来与集群通信的命令行工具。
清空yum缓存
yum clean all
设置 yum安装源
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=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
安装
yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
kubelet 设置开机启动(注意:先不启动,现在启动的话会报错)
systemctl enable kubelet
查看版本
kubelet --version
7.Master节点需要完成
1)运行初始化命令
kubeadm init --kubernetes-version=1.17.0 \
--apiserver-advertise-address=192.168.135.129 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
注意: apiserver-advertise-address这个地址必须是master机器的IP
kubernetes-version这个是安装的版本
常用错误:
错误一:[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver
作为Docker cgroup驱动程序。,Kubernetes推荐的Docker驱动程序是“systemd”
解决方案:修改Docker的配置: vi /etc/docker/daemon.json,加入
{
"exec-opts":["native.cgroupdriver=systemd"]
}
然后重启 Docker
错误二:[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
解决方案:修改虚拟机的CPU的个数,至少为2个
安装过程日志:
最后,会提示节点安装的命令,必须记下来
kubeadm join 192.168.66.101:6443 --token 754snw.9xq9cotze1ybwnti \
--discovery-token-ca-cert-hash
sha256:3372ff6717ea5997121213e2c9d63fa7c8cdfb031527e17f2e20254f382ea03a
2)启动kubelet
systemctl restart kubelet
3)配置kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4)安装Calico
1.mkdir k8s
2.cd k8s
3.wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
4.sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml
5.kubectl apply -f calico.yaml
5)等待几分钟,查看所有Pod的状态,确保所有Pod都是Running状态
kubectl get pod --all-namespaces -o wide
8.Slave节点需要完成
1)让所有节点让集群环境
使用之前Master节点产生的命令加入集群
kubeadm join 192.168.66.101:6443 --token 754snw.9xq9cotze1ybwnti \
--discovery-token-ca-cert-hash
sha256:3372ff6717ea5997121213e2c9d63fa7c8cdfb031527e17f2e20254f382ea03a
重点:
新令牌(要在master节点运行),因为原的令牌有效时间为24小时
kubeadm token create --print-join-command
2)启动kubelet
systemctl start kubelet
3)回到Master节点查看,如果Status全部为Ready,代表集群环境搭建成功!!!
kubectl get nodes
9.kubectl常用命令
kubectl get nodes 查看所有主从节点的状态
kubectl get ns 获取所有namespace资源
kubectl get pods -n {$nameSpace} 获取指定namespace的pod
kubectl describe pod的名称 -n {$nameSpace} 查看某个pod的执行过程
kubectl logs --tail=1000 pod的名称 | less 查看日志
kubectl create -f xxx.yml 通过配置文件创建一个集群资源对象
kubectl delete -f xxx.yml 通过配置文件删除一个集群资源对象
kubectl delete pod名称 -n {$nameSpace} 通过pod删除集群资源
kubectl get service -n {$nameSpace} 查看pod的service情况
问题解决:
1.kubectl delete pod nginx-55f8fd7cfc-4wxzp // 删除后,又重新创建了一个pod,无法删除。
解决办法:
先查询deployment: kubectl get deployment
可以看到一个Nginx,然后,删除这个nginx即可。
kubectl delete deployment nginx
再次查看:
kubectl get deployment
kubectl get pod