在Linux中进行K8s部署
准备工作部署K8s集群对服务器的要求:1)3台以上装有CentOS7.7版本以上的64位系统的服务器;2)每台服务器的硬件配置都是内存最少2G,CPU至少双核,硬盘至少30GB;3)集群中所有服务器之间网络互通;4)可以访问外网,需要拉取镜像;5)禁止swap分区。
准备工作
部署K8s集群对服务器的要求:
1)3台以上装有CentOS7.7版本以上的64位系统的服务器;
2)每台服务器的硬件配置都是内存最少2G,CPU至少双核,硬盘至少30GB;
3)集群中所有服务器之间网络互通;
4)可以访问外网,需要拉取镜像;
5)禁止swap分区。
配置环境
第一步,关闭防火墙和selinux。
命令:systemctl stop firewalld
systemctl disable firewalld
# 永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时禁用selinux
setenforce 0
第二步,关闭swap分区。
# 临时关闭
命令:swapoff -a
# 永久关闭
命令:sed -ri 's/.*swap.*/#&/' /etc/fstab
第三步,添加主机名与IP对应关系(三台主机都执行)。
命令:echo '''x.x.x.108 k8s-master-108 y.y.y.107 k8s-node-107 z.z.z.105 k8s-node-105''' >> /etc/hosts
第四步,各自修改主机名。
命令:hostnamectl set-hostname k8s-master-108
hostnamectl set-hostname k8s-node-107
hostnamectl set-hostname k8s-node-105
第五步,设置网桥参数(三台主机都执行)。
以下net.ipv4.ip_forward如存在=0,修改为1即可
命令:cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安装docker18.09.9(三台服务器都一样)
第一步,卸载旧版本docker。
若系统中已安装旧版本docker,则需要卸载旧版本docker以及与旧版本docker相关的依赖项。
命令:yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
第二步,安装gcc依赖。
命令:yum -y install gcc gcc-c++
第三步,使用Docker仓库进行安装。
在新主机上首次安装Docker Engine-Community之前,需要设置Docker仓库。之后,可以从仓库安装和更新Docker。
# 设置仓库,安装所需的软件包。
命令:yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置稳定的仓库,使用官方源地址(比较慢)
命令:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 可以选择国内的一些源地址,如阿里云
命令:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 可以选择国内的一些源地址,如清华大学源
命令:yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
第四步,安装Docker Engine-Community。
# 安装特定版本的Docker Engine-Community
# 列出存储库中可用的版本并按版本号从高到低进行排序
命令:yum list docker-ce --showduplicates | sort -r
# 通过其完整的软件包名称安装特定版本,如docker-ce-18.09.9。
命令:yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
第五步,启动Docker。
命令:systemctl enable docker
systemctl start docker
systemctl restart docker
若结果显示“Job for docker.service failed because the control process exited with error code.See "systemctl status docker.service" and "journalctl -xe" for details.”,则运行如下命令:
systemctl daemon-reload
systemctl restart docker.service
第六步,验证docker Engine-Community是否正确安装。
命令:docker version
docker run hello-world
若结果显示“Unable to find image 'hello-world:latest' locally”,则需要按照下面的步骤来解决:
1)创建文件daemon.json文件。
命令:touch /etc/docker/daemon.json
2)配置文件/etc/docker/daemon.json,添加阿里云镜像。
{
"registry-mirrors": ["https://ufxq8t1x.mirror.aliyuncs.com"]
}
3)重启docker服务。
命令:systemctl restart docker
systemctl status docker
再次验证:docker run hello-world
若结果显示“Hello from docker!”,则说明docker安装成功。
部署Kubernetes Master
第一步,添加k8s阿里云YUM软件源。
命令: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=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
EOF
第二步,安装kubeadm、kubelet和kubectl。
命令:yum makecache fast
yum -y install kubelet-1.16.0 kubeadm-1.16.0 kubectl-1.16.0
systemctl start kubelet
systemctl enable kubelet
第三步,初始化k8s。
命令:kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address x.x.x.108 --token-ttl 0
若结果显示“Your Kubernetes control-plane has initialized successfully!”,则说明安装成功,然后根据提示,分别执行下面的命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
第四步,记住node加入集群的命令。
执行“kubeadm init”成功后,会返回node节点加入集群的命令,后面要在node节点上执行,需要保存下来。
# 获取node加入集群的命令
命令:kubeadm token create --print-join-command
# 查看此时master的状态
命令:kubectl get nodes
若此时master处于NotReady状态,则暂时不用管。
部署Kubernetes Node
第一步,添加k8s阿里云YUM软件源。
命令: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=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
EOF
第二步,安装kubeadm、kubelet和kubectl。
命令:yum makecache fast
yum -y install kubelet-1.16.0 kubeadm-1.16.0 kubectl-1.16.0
systemctl start kubelet
systemctl enable kubelet
第三步,加入集群。
# 可以登录master节点,获取node加入集群的命令
命令:kubeadm token create --print-join-command
# 可以登录node节点,加入集群
命令:kubeadm join x.x.x.108:6443 --token zerect.sbegb9a9773ak4t1 --discovery-token-ca-cert-hash sha256:39996173db4cb75ecae91263b782de50ba77b7ed866313f2ff9ed03e488088d8
# 加入集群成功后,可以登录master节点,查看是否有加入的节点并查看此时master的状态。
命令:kubectl get nodes
部署容器网络插件(在master上安装)
第一步,登录master节点,新建fannel配置文件。
在/root文件夹中新建kube-flannel.yml文件,然后登录网址:xw_yaml/kube-flannel.yml at main · xuwei777/xw_yaml · GitHub,复制粘贴代码到新建的kube-flannel.yml文件中。
第二步,安装fannel。
命令:kubectl apply -f kube-flannel.yml
kubectl get pods -n kube-system
第三步,查看master的状态。
命令:kubectl get nodes
若此时master处于Ready状态,则说明fannel安装成功。
k8s常用命令
# 查看pod,service,endpoints,secret等的状态
# 查看详细信息可以加上-o wide
# 其他namespace的指定为-n namespace名
命令:kubectl get 组件名
kubectl get -o wide 组件名
kubectl get -n namespace名
# 创建和变更一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件
命令:kubectl apply -f xxx.yaml
# 删除一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件
命令:kubectl delete -f xxx.yaml
# 查看资源状态
命令:kubectl get pod
kubectl describe pod pod名
# 查看pod日志,用于pod状态未就绪的故障排查
命令:kubectl get pod
kubectl logs pod名
# 查看node节点或者是pod资源(cpu,内存资源)使用情况
命令:kubectl top 组件名
# 进入pod内部
命令:kubectl get pod
kubectl exec -ti pod名 /bin/bash
既然看到这里了,就向大家打个广告。如果想要了解更多关于运维和mysql数据库的知识,可以关注我的微信公众号:人文历史与科学技术,下面是二维码,谢谢大家!
更多推荐
所有评论(0)