本文主要是介绍最精简kubernetes(1.15.1)(k8s)集群部署教程--基于CentOS 7,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、k8s环境要求
- 运行以下之一的一台或多台机器:
- Ubuntu 16.04+
- Debian 9
- CentOS 7
- RHEL 7
- Fedora 25/26 (best-effort)
- HypriotOS v1.0.1+
- Container Linux (tested with 1800.6.0)
- 每台机器2 GB或更多的RAM(任何更少的内存将为您的应用留下很小的空间)
- 2个CPU或更多
- 群集中所有计算机之间的网络连通
- 每个节点有唯一主机名,MAC地址和product_uuid(一般只用关注主机名)
- 端口在您的计算机上打开(这个一般都会满足)
- 禁用Swap。必须禁用Swap才能使kubelet正常工作(Swap disabled)
二、开始安装(CentOS7)
修改hostname及hosts
- 修改机器主机名,我这里改为k8s-master、k8s-node1、k8s-node2、k8s-node3
vi /etc/hostname
- 添加hosts
vi /etc/hosts
- 修改完成后重启
- 重启后,各机器通过主机名可互相ping通
安装docker
docker版本需要和k8s版本匹配,1.15.1需要docker至少是18.09及以上版本
-
卸载旧版本(没安装可忽略)
# 在 master 节点和 worker 节点都要执行 sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
删除镜像、容器等
rm -rf /var/lib/docker
-
设置 yum repository
# 在 master 节点和 worker 节点都要执行 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
安装docker
# 在 master 节点和 worker 节点都要执行 sudo yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
-
修改cgroup,创建或修改/etc/docker/daemon.json:
{"exec-opts": ["native.cgroupdriver=systemd"] }
-
启动及开机启动
systemctl start docker systemctl enable docker
-
检查 docker 版本及cgroup
# 在 master 节点和 worker 节点都要执行 docker version docker info | grep Cgroup # 结果:Cgroup Driver: systemd
k8s前期环境配置
-
配置k8s的yum源
# 在 master 节点和 worker 节点都要执行 cat <<EOF > /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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
-
关闭 防火墙、SeLinux、swap
# 在 master 节点和 worker 节点都要执行 systemctl stop firewalld systemctl disable firewalldsetenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/configswapoff -a yes | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab
-
修改 /etc/sysctl.conf
# 在 master 节点和 worker 节点都要执行 vim /etc/sysctl.conf# 向其中添加 vm.swappiness = 0 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1
-
执行命令以应用
# 在 master 节点和 worker 节点都要执行 sysctl -p
k8s安装
- 安装kubelet、kubeadm、kubectl
# 在 master 节点和 worker 节点都要执行 yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
- 启动 kubelet
# 在 master 节点和 worker 节点都要执行 systemctl enable kubelet && systemctl start kubelet
集群初始化
-
使用kubeadm config print init-defaults可以打印集群初始化默认的使用的配置,根据此制作出本次使用kubeadm初始化集群所需的配置文件kubeadm.yaml(根据自身情况修改)
# 在master上创建kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration localAPIEndpoint:advertiseAddress: k8s-masterIP地址 # 需要修改bindPort: 6443 nodeRegistration:taints:- effect: PreferNoSchedulekey: node-role.kubernetes.io/master --- apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: v1.15.1 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers controlPlaneEndpoint: "k8s-master:6443" #需要修改 networking:podSubnet: 10.244.0.0/16 #每种网络配置不同
-
podSubnet 所使用的网段不能与节点所在的网段重叠
-
初始化master
# 只在 master 节点执行 kubeadm init --config=kubeadm-config.yaml --upload-certs
根据您服务器网速的情况,您需要等候 1 – 10 分钟
-
执行结果如下图所示:
Your Kubernetes master has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:/docs/concepts/cluster-administration/addons/You can now join any number of machines by running the following on each node as root:kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
-
初始化 root 用户的 kubectl 配置
# 只在 master 节点执行 rm -rf $HOME/.kube/ mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
安装pod网络
- 官网上有多种网络可选,每种网络都有自己的网段ip范围,和kubeadm-config.yaml里配置的podSubnet对应,也就是你想装那种网络,podSubnet就配置上对应的网段,这里选择安装flannel
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
- 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system
加入集群
- 获得 join命令参数
# 只在 master 节点执行 kubeadm token create --print-join-command
- 可获取kubeadm join 命令及参数,如下所示
# kubeadm token create 命令的输出 kubeadm join k8s-master:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
- 在所有的 node节点执行
kubeadm join k8s-master:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
- 检测结果
结果# 只在 master 节点执行 kubectl get nodes
三、其他
从master以外的节点控制集群
将API服务器代理到localhost
四、卸载集群
- 集群重置
#所有节点 kubeadm reset
- 卸载
#所有节点 yum remove kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
六、问题排查日志查看
- 查看系统日志
tail -f /var/log/messages
- 查看pod描述,也可用于查看其他组件
kubectl describe pod pod-name -n namespace
- 查看pod日志
kubectl logs pod-name -n namespace
- 进入容器
kubectl exec -it pod-name -n namespace -- /bin/bash
五、k8s常用命令
kubectl create namespace quota-pod-example
kubectl label node centos-2gb-sfo1-03 role=frontend
kubectl apply -f deployment.yaml
kubectl delete -f deployment.yaml
kubectl label node nodeName label=a
kubectl get node --show-labels
kubectl label node nodeName label-
删除label标签kubectl -n kube-system get pods | grep Evicted |awk '{print$1}'|xargs kubectl -n kube-system delete pods
批量删除被驱逐pod;
如果需要安装更高版本,需要更新docker版本和k8s版本,其他周边配置不变;
整理不易,感谢赞赏~~~~
这篇关于最精简kubernetes(1.15.1)(k8s)集群部署教程--基于CentOS 7的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!