K8S(一)——在虚拟机中搭建K8S

1.在虚拟机中安装3台centos(版本为1708)

 

   ①下载镜像可找国内镜像地址镜像下载

          https://www.cnblogs.com/LiLiliang/p/12090115.html

2.检查网络是否通畅,ping以下百度的IP地址(可在主机命令符中ping baidu.com得到解析后的IP)

 

 

***  报错 network is unreachable可修改ifcfg-ens3配置进行解决

 

cd /etc/sysconfig/network-scripts/  
vi ifcfg-ens33

修改ONBOOT=yes

 

  重启network 

  

service network restart

检查网络可用 

 

3.修改源镜像地址

  ①安装wget命令

yum -y install wget

  ②备份系统自带的源镜像地址

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

  ③下载阿里云的源镜像地址

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

  ④生成缓冲

yum makecache

4.安装VMware Tools

 *** 如果觉得安装VMware-TOOLS过于麻烦,可使用Linux远程工具(CRT或者SSH),在宿主机器上进行连接使用。实测好用很多(* ̄︶ ̄)

  ①点击菜单栏–>虚拟机–>安装VMware Tools

 

    ②在虚拟机中,以 root 身份登录客户机操作系统,打开终端窗口并运行ls /dev命令查看是否含有cdrom目录

  

  ③将CD-ROM挂载到其他目录下,一般是将/dev/cdrom 挂载到/mnt/cdrom目录

  使用ls /mnt查看是否已经含有/cdrom目录 如果没有则创建cdrom 

  

mkdir cdrom

  ④使用命令mount -t iso9660 /dev/cdrom /mnt/cdrom将光盘挂载在/mnt/cdrom目录,并使用命令ls /mnt/cdrom查看是否挂载成功

   

 mount -t iso9660 /dev/cdrom /mnt/cdrom ls /mnt/cdrom

  ⑤将后缀名为tar.gz的文件拷贝到家目录下,使用命令cp /mnt/cdrom/ VMwareTools-9.9.3-2759765.tar.gz ~,并用命令ls ~查看是否复制成功

   

 cp /mnt/cdrom/ VMwareTools-9.9.3-2759765.tar.gz ~ ls ~

  ⑥使用命令umount /dev/cdrom解除挂载

   

 umount /dev/cdrom

  ⑦进去root跟目录下,使用命令tar -zxvf VMwareTools-9.9.3-2759765.tar.gz解压包

   

 tar -zxvf VMwareTools-9.9.3-2759765.tar.gz

  ⑧使用命令cd vmware-tools-distrib进入到解压后的源码文件目录,运行vmware-install.pl文件

  

cd vmware-tools-distrib ./vmware-install.pl

***  如果出现以下错误(“-bash: ./vmware-install.pl: /usr/bin/per: bad interpreter: No such file or directory”),表明未安装编译环境

  

 安装编译环境

   

 yum -y install perl gcc gcc-c++ make cmake kernel kernel-headers kernel-devel net-tools

 

5.关闭、禁用防火墙: 

  

systemctl stop firewalld systemctl disable firewalld

6.禁用SELINUX(setenforce是Linux的selinux防火墙配置命令, 执行setenforce 0 表示关闭selinux防火墙):

  

setenforce 0

7.创建 /etc/sysctl.d/k8s.conf 文件,添加如下内容: 

  

  

net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1

使得配置文件生效 

  

modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf

** 界面繁琐时可reset命令进行清空界面

8.安装docker

  # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 

   # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

  # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce 

   # Step 4: 开启Docker服务 sudo service docker start  # Step 5: 设置开机启动 sudo systemctl enable docker 

  

  

  

  

  

  

查看docker是否安装成功

docker -v

 

9.配置阿里云镜像加速器:

mkdir -p /etc/docker  tee /etc/docker/daemon.json <<-'EOF' {   "registry-mirrors": ["https://obww7jh1.mirror.aliyuncs.com"] } EOF
 systemctl daemon-reload 
 systemctl restart docker

  

10.安装 kubelet kubeadm kubectl

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  
yum install -y kubelet kubeadm kubectl  
systemctl enable --now kubelet

  

   

 

11.初始化 Master 节点 master

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers

 

 l  --pod-network-cidr :后续安装 flannel 的前提条件,且值为 10.244.0.0/16, 参考资料

l  --image-repository :指定镜像仓库

**报错the number of available CPUs 1 is  less than the required 2

解决:需要机器至少需要两核,修改虚拟机设置即可

  

 报错running with swap on is not supported. Please disable swap

解决:需要关闭swap

swapoff -a

修改 vi /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用free -m确认swap已经关闭。 swappiness参数调整,修改vi /etc/sysctl.d/k8s.conf添加下面一行:

vm.swappiness=0

执行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。

  

  

   

从日志中,可以看出,要使用集群,需要执行如下命令: 

 mkdir -p $HOME/.kube   
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config   
sudo chown $(id -u):$(id -g) $HOME/.kube/config

  

还需要部署一个 Pod Network 到集群中,此处选择 flannel :

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  

** 如果此处报错连接不上raw.githubusercontent.com,可自行在下载kube-flannel.yml,放到虚拟机系统中

参考链接:https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml

  

至此,Master 节点初始化完毕,查看集群相关信息:

# 查看集群信息 $ kubectl cluster-info

  

# 查看节点信息$ kubectl get nodes

 

# 查看 Pods 信息$ kubectl get pods --all-namespaces

  

如果初始化过程出现问题,使用如下命令重置:

kubeadm reset rm -rf /var/lib/cni/ rm -f $HOME/.kube/config

12.将node1和node2加到master中

在master中生成token和sh256

kubeadm token createopenssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

  

 在node1和node2中join

 kubeadm join 192.168.19.133:6443 --token kgm5g2.i9h9zupp09ai0ema--discovery-token-ca-cert-hash sha256:821850c1ff323bc8555006f9c6eb9d0f135d91898aa11c8821678144e715210a

注意:实际命令中的ip、token和sha256应以自己机器实际的为准

在master中查看

 kubectl get nodes

  

***如果这里是notready,如果pod状态为Pending、ContainerCreating、ImagePullBackOff 都表明 Pod 没有就绪,Running 才是就绪状态。

如果有pod提示Init:ImagePullBackOff,说明这个pod的镜像在对应节点上拉取失败,我们可以通过 kubectl describe pod 查看 Pod 具体情况,以确认拉取失败的镜像:

   

可以用国内镜像源,注意命令中的版本号应和自己的实际版本号一致,可用 kubectl describe pod kube-flannel-ds-amd64-d2r8p --namespace=kube-system查看(kube-flannel-ds-amd64-d2r8p为pod名称)

docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64

13.测试集群各个组件

  首先验证kube-apiserver, kube-controller-manager, kube-scheduler, pod network 是否正常:部署一个 Nginx Deployment,包含2个Pod

 kubectl create deployment nginx --image=nginx:alpine
kubectl scale deployment nginx --replicas=2

验证Nginx Pod是否正确运行,并且会分配10.244.开头的集群IP

kubectl get pods -l app=nginx -o wide

验证一下kube-proxy是否正常

kubectl expose deployment nginx --port=80 --type=NodePort

可以通过任意 NodeIP:Port 在集群外部访问这个服务:

curl 192.168.150.128:30670

 

参考地址:https://www.cnblogs.com/tylerzhou/p/10971336.html

**如果机器断电关机后,无法启动,报The connection to the server localhost:8080 was refused 错误

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile

执行这两天命令可解决

  

原文地址:https://www.cnblogs.com/LiLiliang/p/12120798.html