openEuler23操作系统安装
服务器搭建环境随手记
文章目录
- openEuler23操作系统安装
- 前言:
- 一、前期准备(所有节点)
- 1.1所有节点,关闭防火墙规则,关闭selinux,关闭swap交换,打通所有服务器网络,进行ping测试
- 1.1.1关闭防火墙
- 1.1.2关闭selinux增强机制
- 1.1.3配置iptables的ACCEPT规则
- 1.1.4关闭swap
- 1.2所有节点,修改各个主机名,并写入所有服务器的hosts中
- 1.2.1所有节点,给hosts文件,并增加ip映射
- 1.3所有节点,设置系统参数,调整内核参数,将桥接的 IPV4 流量传递到 iptables 链
- 1.4所有节点,安装Docker
- 1.4.1导入 Docker 的软件源 GPG 签名密钥,以确保下载的软件包真实可信
- 1.4.2设置镜像源
- 1.4.3安装docker
- 1.4.4设置系统管理docker命令
- 1.4.5重新加载服务配置文件,并启动docker
- 1.5所有节点,配置k8s镜像源
- 1.6所有节点安装kubeadm,kubelet和kubectl
- 二、master节点操作(master节点)
- 2.1初始化master节点
- 2.2根据日志提示执行以下命令可使用kubectl管理工具
- 三、node节点操作(所有node节点)
- 3.1kube join将node节点加入k8s集群
- 四、安装部署网络插件(master节点上)
- 4.1calico网络插件
- 4.1.1部署方式
- 五、检查各节点健康状态
前言:
kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。
服务器环境
在所有节点上安装Docker和kubeadm
部署Kubernetes Master
部署容器网络插件
部署 Kubernetes Node,将节点加入Kubernetes集群中
搭建一主一从集群
服务器列表:
服务器类型 IP地址
master | 192.168.0.185 |
---|---|
node-1 | 192.168.0.56 |
一、前期准备(所有节点)
1.1所有节点,关闭防火墙规则,关闭selinux,关闭swap交换,打通所有服务器网络,进行ping测试
全部的服务器都执行以下服务器
1.1.1关闭防火墙
systemctl stop firewalld
#关闭防火墙
systemctl disable firewalld
#禁止防火墙启动
1.1.2关闭selinux增强机制
setenforce 0
#关闭selinux
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#永久关闭selinux
1.1.3配置iptables的ACCEPT规则
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
1.1.4关闭swap
swapoff -a
#交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
1.2所有节点,修改各个主机名,并写入所有服务器的hosts中
hostnamectl set-hostname master
#修改主机名
hostnamectl set-hostname node-1
bash
#每个节点修改完后记得刷新重启加载
1.2.1所有节点,给hosts文件,并增加ip映射
cat >> /etc/hosts << EOF
10.168.9.184 master
10.168.9.183 node-1
EOF
#这里ip必须和前面修改的主机名一致
1.3所有节点,设置系统参数,调整内核参数,将桥接的 IPV4 流量传递到 iptables 链
#调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
sysctl --system #加载参数
1.4所有节点,安装Docker
1.4.1导入 Docker 的软件源 GPG 签名密钥,以确保下载的软件包真实可信
sudo rpm --import https://download.docker.com/linux/centos/gpg #安装依赖
1.4.2设置镜像源
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
EOF
1.4.3安装docker
yum install -y docker-ce docker-ce-cli containerd.io
#安装docker
1.4.4设置系统管理docker命令
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
1.4.5重新加载服务配置文件,并启动docker
systemctl daemon-reload
#重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载上方已经让docker归属systemctl管理了。
systemctl restart docker.service
#重启docker
systemctl enable docker.service
#设置开机自启
docker info | grep "Cgroup Driver"
#显示Cgroup Driver: system为正确
1.5所有节点,配置k8s镜像源
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
EOF
#定义kubernetes源
1.6所有节点安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
systemctl enable kubelet.service #开机自启kubelet
systemctl start kubelet.service #启动
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启
二、master节点操作(master节点)
2.1初始化master节点
官网参考:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
kubeadm init \
--apiserver-advertise-address=10.168.9.184 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
【若要重新初始化集群状态:kubeadm reset,然后再进行上述操作】
参数说明
kubeadm init \
--apiserver-advertise-address=10.168.9.184 \
#指定master监听的地址,修改为自己的master地址
--image-repository registry.aliyuncs.com/google_containers \
#指定为aliyun的下载源,最好用国内的
--kubernetes-version v1.18.0 \
#指定k8s版本,1.18.0版本比较稳定
--service-cidr=10.96.0.0/12 \
#设置集群内部的网络
--pod-network-cidr=10.244.0.0/16
#设置pod的网络
# service-cidr 和 pod-network-cidr 最好就用这个,不然需要修改后面的 kube-flannel.yaml 文件
记得保存好最后的 kubeadm join的信息node节点加入集群需要token!!!
不然要执行生成token
kubeadm token create --print-join-command
#利用kubeadm命令重新生成token,node 节点加入集群需要token
2.2根据日志提示执行以下命令可使用kubectl管理工具
执行上方初始化master节点后程序会打印提示日志(就是设置环境变量)
kubeconfig官网解释
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#命令的含义:Kubectl 是一个命令行接口,用于对 Kubernetes 集群运行命令。
#Kubectl 在 $HOME/.kube 目录中寻找一个名为 config 的文件。
#你可以通过设置环境变量 KUBECONFIG 或设置 --kubeconfig 参数指定其它 kubeconfig 文件
#当集群初始化成功后,要使 kubectl 适用于非 root 用户,则需要运行以下命令,这些命令也是 kubeadm init输出的一部分
#即创建.kube目录 -> 拷贝配置文件 -> 用户授权
#当然,如果你是 root 用户,则可以直接添加环境变量:执行export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl cluster-info
#查看一下是否成功,等待一会儿,同时可以发现像etc,controller,scheduler等组件都以pod的方式安装成功
三、node节点操作(所有node节点)
3.1kube join将node节点加入k8s集群
记得保存初始化master节点的最后打印信息【注意这边要自己的,下面我的只是一个参考
】!!!
kubeadm join 10.168.9.184:6443 --token ocf65a.xz2z2v5oloxs5pn5 \
> --discovery-token-ca-cert-hash sha256:fd77aa9043c785bf0b2e79fa7293137d56aeef07e5259654b4afa0ce38b74362
#获取前面创建好的token令牌,所有node节点都执行
四、安装部署网络插件(master节点上)
必须安装网络组件否则k8s各个节点都是Noready状态
calico和flannel二选一(本次安装使用的是flannel网路插件
)
二者不同可以查看官方文档
4.1calico网络插件
选择calico网络插件版本:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
calico网络插件:
https://docs.tigera.io/v3.9/manifests/tigera-operator.yaml
4.1.1部署方式
kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml
# 在k8s中安装calico
kubectl get pods --all-namespaces -w
# 确认一下calico是否安装成功状态是否正常
五、检查各节点健康状态
kubectl get cs
#查询master是否正常
#若状态为unhealthy
vim /etc/kubernetes/manifests/kube-scheduler.yaml
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
#将- --port=0注释掉
kubectl get pods -A
#检查容器状态节点状态
kubectl get nodes
#查询node节点是否ready
到此部署结束