一 主机环境

主机系统
server88master节点Centos7.7
server87node节点Centos7.7
server101node节点Centos7,6
安装K8s环境准备

1.防火墙一定要提前关闭

systemctl stop firewalld & systemctl disable firewalld

在这里插入图片描述

2.关闭swap内存

在安装K8S集群时,Linux的Swap内存交换机制是一定要关闭的,否则会因为内存交换而影响稳定性。

swapoff -a #重启后恢复

3.关闭Selinux

sudo setenforce 0

二.安装K8S(三台服务器操作)

安装K8s分别有yum安装,源码安装,二进制安装,kubeadm安装,这里选择官方的工具kubeadm安装。

安装K8s要注意K8s与docker的版本兼容问题,防止出现版本不兼容情况。

配置下载源

1.官方仓库无法使用,建议使用阿里源的仓库添加kubernetes.repo

vim  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

2.下载组件kubelet、kubeadm、kubectl

这里安装Kubernetes1.15版本

    sudo yum install  kubelet-1.15.1-0.x86_64 kubectl-1.15.1-0.x86_64 kubeadm-1.15.1-0.x86_64 
配置kubelet的cgroup drive

确保docker 的cgroup drive 和kubelet的cgroup drive一样

[root@server88 ~]# docker info | grep -i cgroup
 Cgroup Driver: cgroupfs

然后再查看我们的kubectl的Cgroup

[root@k8s-node1 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

没有的话,我们就加入进去

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

在这里插入图片描述

重新加载

[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl enable kubelet

三 下载K8S集群的核心组件的镜像(三台服务器操作)

K8s将之前的kube-apiserver,kube-scheduler,kube-proxy以及数据库etcd等组件都打包成了镜像,在使用的是K8S官方提供的kubeadm工具来初始化K8S集群,而初始化操作kubeadm init会默认去访问谷歌的服务器,以下载集群所依赖的Docker镜像,因此也会超时失败。所以需要可提前导入这些镜像,kubeadm init操作就会发现这些镜像已经存在,就不会再去访问谷歌。

下载docker镜像

要注意的是:要拉取的4个核心组件kube-scheduler,kube-proxy,kube-apiserver,kube-controller-manager的镜像版本和你安装的 kubelet、kubeadm、kubectl 版本需要是一致的。

sudo docker pull mirrorgooglecontainers/kube-scheduler:v1.15.1
sudo docker pull mirrorgooglecontainers/kube-proxy:v1.15.1
sudo docker pull mirrorgooglecontainers/kube-apiserver:v1.15.1
sudo docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.1
sudo docker pull mirrorgooglecontainers/etcd:3.3.10
sudo docker pull mirrorgooglecontainers/pause:3.1
sudo docker pull mirrorgooglecontainers/coredns:1.3.1

手动修改镜像tag,伪装成k8s.gcr.io的名称

例:

sudo docker tag mirrorgooglecontainers/kube-scheduler:v1.15.1  k8s.gcr.io/kube-scheduler:v1.15.1

修改完成如下

k8s.gcr.io/kube-proxy:v1.15.1
k8s.gcr.io/kube-scheduler:v1.15.1 
k8s.gcr.io/kube-apiserver:v1.15.1
k8s.gcr.io/kube-controller-manager:v1.15.1
k8s.gcr.io/coredns:1.3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/pause:3.1

四 创建集群

在Master主节点(server88)上执行初始化命令:

[root@k8s-node1 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.15.1 --apiserver-advertise-address=192.168.0.88

含义:
1.--pod-network-cidr=192.168.0.0/16 集群将使用Calico网络,这里需要提前指定Calico的子网范围
2.--kubernetes-version=v1.15.1指定K8S版本,这里必须与之前导入到Docker镜像版本一致,不然会访问谷歌去重新下载K8S最新版的Docker镜像
3.--apiserver-advertise-address绑定的网卡IP,这里一定要绑定到192.168.0.88

执行初始化命令

[root@k8s-node1 ~]# kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.15.1 --apiserver-advertise-address=192.168.0.89

初始化成功

将加入K8s集群命令保留存放,后续会使用该命令将node节点加入集群

kubeadm join 192.168.0.88:6443 --token yxy6sj.mkhgdntu38t1ouc1 \
    --discovery-token-ca-cert-hash sha256:7ffbf14048599d370edfaa9855b569219363d23c5a76cb3c6b262b7b554de6d2 

五 创建网络

根据官网文档需要在主节点上执行下面命令

[root@k8s-node1 ~]# sudo kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml

执行成功后查看,calico网络组件容器运行成功

在这里插入图片描述

六 将其他节点加入K8s集群

在其他两个节点server87和server101上,执行主节点生成的kubeadm join命令加入集群

server87

在这里插入图片描述

server101

在这里插入图片描述

加入集群成功

在这里插入图片描述

验证集群

执行查看节点命令

kubectl get node

在这里插入图片描述

#查看日志
sudo journalctl -f -u kubelet


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

七 测试集群功能

创建pod资源

在这里插入图片描述

运行两个pod资源

在这里插入图片描述在这里插入图片描述
可以看见,两个pod资源已经分配到不同的主机上运行了

在这里插入图片描述

八 故障记录

1.从库无法执行kubectl命令查看集群信息
在这里插入图片描述
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后在需要的用户下配置环境变量:

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

再次执行命令,解决问题

在这里插入图片描述

2.从库server101节点加入集群失败

在这里插入图片描述

在server101主机上执行执行kubeadm reset重置,重新执行加入集群命令即可解决

kubeadm join 192.168.0.88:6443 --token yxy6sj.mkhgdntu38t1ouc1 \
    --discovery-token-ca-cert-hash sha256:7ffbf14048599d370edfaa9855b569219363d23c5a76cb3c6b262b7b554de6d2 

K8s常用命令

1.获取节点相应服务的信息:kubectl get nodes
2.查看集群信息: kubectl cluster-info
3.查看pods所在的运行节点 kubectl get pods -o wide
4.查看指定资源的详细信息 kubectl describe pod nginx
5.查看所有pod的IP及节点kubectl get pods -o wide --all-namespaces 
6.创建资源 kubectl create -f 文件名.yaml
7.删除资源
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all

pods -o wide
4.查看指定资源的详细信息 kubectl describe pod nginx
5.查看所有pod的IP及节点kubectl get pods -o wide --all-namespaces
6.创建资源 kubectl create -f 文件名.yaml
7.删除资源
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐