运维 - 实践篇(五)- 基础 K8S 单机环境搭建
一、说明
1. 服务器配置介绍 二、基础K8S单机环境搭建流程
1. 查看服务器网卡IP2. 修改主机名称3. 添加 Host4. 关闭防火墙5. 关闭 selinux6. 关闭 swap 交换区间7. 配置 Iptables 链路8. 时间同步10. 添加 K8S yum 源11. 安装 kubeadm、kubelet、kubectl12. 安装 k8s13. 配置 kubectl 工具 三、配置 k8s 网络插件
1. 安装 calico 网络插件2. 查看结果 四、K8S单机特殊处理
1. Master 节点污点处理2. 安装补全命令的包 五、基于K8S单机部署中间服务
| 修订时间 | 修订内容 | 备注 |
|---|---|---|
| 2022/02/02 | 完成 K8S 单机环境基础环境搭建 | create |
一、说明 1. 服务器配置介绍其实在整理这篇文章之前,我先搭建了基于 Docker 的 Jenkins 自动化部署环境,但是,遇到了一下几点问题:
1、我通过 Docker 搭建的 Jenkins 打包运行 jar 包之后,宿主机无法正常访问。于是我索性执行打 docker 镜像。
2、讲道理,不应该通过 Docker 的方式去搭建 jenkins 环境。最后 jenkins 的环境具体用什么方式搭建还有待确定。
以下我们开始搭建基础的 K8S 单机环境,这里同样可以选用 Minikube 搭建 K8S。
这里我换了一台配置稍微高一点的主机,用于部署自己的服务和相关的中间件。可以参考之前的文章进行服务器的初始化配置以及 Docker 开发环境搭建。
| 主机名 | 配置 | 公网IP / 网卡IP | 角色 |
|---|---|---|---|
| Tx-Code-42 | 4核16G | 42.192.222.62 / 10.0.4.16 | Master |
1. 查看服务器网卡IP虽然说是单机部署,但在流程上做了集群部署的准备。
$ ip addr2. 修改主机名称
$ hostnamectl set-hostname k8s-master && bash3. 添加 Host
$ cat > /etc/hosts << EOF 10.0.4.16 k8s-master 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 EOF4. 关闭防火墙
$ systemctl stop firewalld $ systemctl disable firewalld5. 关闭 selinux
$ setenforce 0 $ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config6. 关闭 swap 交换区间
# 临时 $ swapoff -a # 永久 $ sed -i 's/.*swap.*/#&/' /etc/fstab7. 配置 Iptables 链路
$ cat > /etc/sysctl.d/k8s.conf <8. 时间同步 yum install ntpdate -y ntpdate time.windows.com10. 添加 K8S yum 源$ cat > /etc/yum.repos.d/kubernetes.repo << EOF [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 EOF11. 安装 kubeadm、kubelet、kubectl# 安装版本是v1.21.5 yum -y install kubelet-1.21.5-0 kubectl-1.21.5-0 kubeadm-1.21.5-0 systemctl enable kubelet12. 安装 k8skubeadm init 命令的常用选项说明:
kubernetes-version :kubernetes 程序组件的版本号,尽量与安装的 kubelet 版本号相同image-repository :指定要使用的镜像仓库 默认: gar.ioapiserver-advertise-address :一般为 Master 节点用于集群内通信的IP地址,填主机的网卡IP地址 10.0.4.16,也可以填 0.0.0.0 (这里我自己填的这个)service-cidr :Service 网络的地址范围,其值为 CIDR 格式的网络地址。默认为 10.96.0.0/12pod-network-cidr :Pod 网络的地址范围,其值为 CIDR 格式的网络地址。通常 Flannel 的网络插件默认值为 10.244.0.0/16 ;Calico 插件的默认值为 192.168.0.0/16
kubeadm init --apiserver-advertise-address 10.0.4.16 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.5 --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16 --ignore-preflight-errors all --token-ttl 0保存如下提示信息,便于后续加入节点
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBEConFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.0.4.16:6443 --token uu6f09.z498pb30kz87e39m --discovery-token-ca-cert-hash sha256:f8432251857330193c6021b661cb65ca108da8f52034203a2881d24347d4a10f13. 配置 kubectl 工具mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config三、配置 k8s 网络插件 1. 安装 calico 网络插件yum install -y ca-certificates
# 获取 calico.yaml wget https://docs.projectcalico.org/manifests/calico.yaml sed -i "s#192.168.0.0/16#10.244.0.0/16#" calico.yaml kubectl apply -f calico.yaml2. 查看结果kubectl get node四、K8S单机特殊处理 1. Master 节点污点处理单集版的k8s安装后, 无法部署服务。因为默认master不能部署pod,有污点, 需要去掉污点或者新增一个node,我这里是去除污点。
#执行后看到有输出说明有污点 kubectl get node -o yaml | grep taint -A 5 #执行这句就行,就是取消污点 kubectl taint nodes --all node-role.kubernetes.io/master-2. 安装补全命令的包yum -y install bash-completion kubectl completion bash source /usr/share/bash-completion/bash_completion kubectl completion bash >/etc/profile.d/kubectl.sh source /etc/profile.d/kubectl.sh cat >> /root/.bashrc <五、基于K8S单机部署中间服务 $ kubectl create deployment nginx --image=nginx $ kubectl expose deployment nginx --port=80 --type=NodePort $ kubectl get pods,svc



