无坑部署vmware搭建最新k8s集群(1.17.3)
我的环境
环境 | 说明 |
---|---|
宿主机 | windows10(内存24G) |
vmware | 版本v12 |
centos | v7.6 |
虚拟机 | 说明 |
---|---|
192.168.159.133 | master,4C 8G |
192.168.159.135 | node,4C 4G |
2台centos都要执行的步骤
关闭防火墙
顺序执行命令:
iptables -F
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
修改hostname
执行命令: vi /etc/hostname
我把 192.168.159.133 改成 workone,192.168.159.135改成worktwo (名字根据自己随意)
修改host文件
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.159.133 workone
192.168.159.135 worktwo
禁用swap
执行命令:
swapoff -a
vi /etc/fstab
找到下面行在前面加一个 # 注释 swap功能
#/dev/mapper/centos-swap swap swap defaults 0 0 #禁用swap自动挂载
注意:刚安装好centos虚拟机时 我在 fstab 文件没有找到这行,我重启了找到,所以如果你没找到的话,可以先继续下面步骤,因为后面启动出错会有提示让你禁用swap
安装Docker
顺序执行命令:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io systemctl start docker.service systemctl enable docker.service
配置阿里云镜像加速器
cat>>/etc/docker/daemon.json<<EOF { "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ] } EOF
上面执行完后 重启docker生效
执行命令:
systemctl daemon-reload
systemctl restart docker
添加K8s 国内镜像源
cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF [kubernetes] name=Kubernetes Repo baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg EOF
安装K8s所需要的3个组件
执行命令:
yum install -y kubeadm kubelet kubectl
说明:
kubeadm:安装工具,使所有的组件都会以容器的方式运行
kubectl:客户端连接K8S API工具
kubelet:运行在node节点,用来启动容器的工具
设置k8s开机自启动
执行命令:
systemctl enable kubelet.service
加载内核模块
cat>>/etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_nonlocal_bind = 1 net.ipv4.ip_forward = 1 vm.swappiness=0 EOF
然后执行
vi /etc/sysctl.conf 填写: net.ipv4.ip_forward = 1
执行命令: sysctl -p
执行命令:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- br_netfilter 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|nf_conntrack_ipv4"
上面的步骤需要在2台centos虚拟机都得执行的!
下面的步骤只在master机器上操作
我是用 192.168.159.133 作为 master机器
通过如下指令创建默认的kubeadm-config.yaml文件:
执行命令:
kubeadm config print init-defaults > kubeadm-config.yaml
然后修改 kubeadm-config.yaml配置
下面有注释的地方就是要修改的地方!!!
[root@docker-server1 ~]# vi kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.159.133 #master节点的IP bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: 192.168.159.133 #修改为IP地址,如果使用域名,必须保证解析正常 taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd #把etcd容器的目录挂载到本地的/var/lib/etcd目录下,防止数据丢失 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #镜像仓库地址,可以修改为gcr.azk8s.cn/google_containers kind: ClusterConfiguration kubernetesVersion: v1.17.3 #Kubernetes软件版本 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16 #添加这个内容 scheduler: {}
预先下载镜像
执行命令:
kubeadm config images pull --config kubeadm-config.yaml
执行命令:
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
安装matser节点
执行命令:
kubeadm init --config kubeadm-config.yaml
如果输出以下信息表示,swap没有被禁用
[ERROR Swap]: running with swap on is not supported. Please disable swap
输出以下信息表示,请执行echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
安装成功后注意看console上运行的信息
会显示如下的信息 按步执行即可
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
会显示加入到master的命令,保存下来
把下面的命令拿到 192.168.159.135 工作节点虚拟机上运行
kubeadm join 192.168.159.133:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:c2d6067d5c3b12118275958dee222226d09a89fc5fb559687dc989d2508d5a50
如果没有以上信息说明安装失败了!
以上运行成功 检测下
sudo kubectl get nodes
你会发现 Status 是 NotReady,因为没有安装网络插件!
安装网络插件flannel
因为上面我们安装的的k8s的版本是 v 1.17.3
这个版本对应的 flannel 版本是:v0.11.0
因为由于某种不可抗力 一定得先下载好docker镜像!
下载 flannel 的 yml文件:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
执行命令:
kubectl apply -f kube-flannel.yml
等待k8s 把 pod:flannel生效 可以用命令查看状态进度:
kubectl get pods -n kube-system
等 flannel 状态显示 Running后
执行查看k8s集群运行状态命令:
sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION 192.168.159.133 Ready master 61m v1.17.3 worktwo NotReady <none> 58m v1.17.3
发现master已经Ready了 但是工作node没有起来,状态是NotReady
下面去配置工作node虚拟机上的flannel配置
192.168.159.135 是我的工作node
运行命令把master节点的配置copy到工作节点
scp -r 192.168.159.133:/etc/cni /etc/cni
重启启动 kubelet
systemctl restart kubelet
回到master节点查看
执行查看k8s集群运行状态命令:
sudo kubectl get nodes
[root@workone ~]# sudo kubectl get nodes NAME STATUS ROLES AGE VERSION 192.168.159.133 Ready master 66m v1.17.3 worktwo Ready <none> 64m v1.17.3
安装Dashboard UI
先下载官方配置文件:
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
默认不对外开放端口,下载好了后需要自己手动改下配置文件
修改权限为超级管理员
安装命令:
kubectl apply -f recommended.yaml
运行命令获取Token,登录需要:
[root@workone ~]# kubectl describe secret -n kubernetes-dashboard $(kubectl get secret -n kubernetes-dashboard |grep kubernetes-dashboard-token | awk '{print $1}') |grep token | awk '{print $2}' kubernetes-dashboard-token-jzptb kubernetes.io/service-account-token eyJhbGciOiJSUzI1NiIsImtpZCI6IkhsLUpGV0lkalc0VHlIb2p5LVhWQ21LdFBPVGFkbUlJcVJqQ2pfNHE0VWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1qenB0YiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjVjYjQ1ZTg5LTZkNjMtNDgzMS1iYWIyLTUwNWZkMTkzMDVkYSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.ShQwJ6xhntHDSpD828n4vkOVVKVRZ7KmeRPEH0tbPkcnC3bwAgwFJWfa_JIdi6KpTAMOOj4IY2fFAB83iorcqYQMG88BurNSzKSANC7cK8d3fHy5iTdh7e5IKQ_FV1mpd3d9DPLuoLjIVZKMROVleC11q6NOlNbIY4_R79Kvx3TGNqm8AWWhxBOsJ8KTTa5P6o36cH2nsJ64Qi-_x4BuA14CMSm9UJqXawi4AqYIRshlnrspDTSFRm6e3tHix-kSZQ4xIuPeKB6E59EKnCmbaPU73GfhJWWazIVCykmZg50b4uykTtXJcaWf743xjEJnfbVztcY2-kLIcgXznt37ug