kubernetes学习1——在阿里云上部署k8s集群

机器配置

master 4vCPU 16Gib
node1 2vCPU 4Gib
node2 2vCPU 4Gib
node3 2vCPU 4Gib
操作系统:centos7.9
版本:
kubernetes 1.29.0
containerd v1.7

通过kubeadm快速安装kubernetes集群

关闭交换分区

swapoff -a

禁用SELinux

setenforce 0

yum换源(阿里云机器已经默认阿里源不需要更换)

# 备份源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载源
cd /etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

curl -O http://mirrors.aliyun.com/repo/Centos-7.repo # 如果没有wget就用curl
mv /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
# 更新源
yum clean all
yum makecahce
yum upgrade

转发IPv4并让iptables看到桥联流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system
# 确认 br_netfilter 和 overlay 模块被加载
lsmod | grep br_netfilter
lsmod | grep overlay

# 确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

安装containerd

# 确认libseccomp版本(runc依赖于libseccomp,libseccomp2.3版本不可用)
# 查看版本 (libseccomp-2.3.1-4.el7.x86_64)
rpm -qa | grep libseccomp

# 删除旧版本
yum remove -y libseccomp

# 下载新版本
wget https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/libseccomp-2.5.1-1.el8.x86_64.rpm
rpm -ivh libseccomp-2.5.1-1.el8.x86_64.rpm

# 查看版本
rpm -qa | grep libseccomp

# 参考:https://devpress.youkuaiyun.com/k8s/66c9a1247648734c1b168432.html
# 下载containerd
wget https://github.com/containerd/containerd/releases/download/v1.7.23/cri-containerd-cni-1.7.23-linux-amd64.tar.gz

# 解压缩
tar xzf cri-containerd-cni-1.7.23-linux-amd64.tar.gz -C /

# 将/usr/local/bin和/usr/local/sbin追加到~/.bashrc文件的PATH环境变量中
export PATH=$PATH:/usr/local/bin:/usr/local/sbin
# 创建&修改配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

# 修改pause镜像地址
修改sanbox_image的值:
registry.k8s.io/pause:3.8 -> registry.aliyuncs.com/google_containers/pause:3.9

#使用如下命令修改cgroup驱动
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重新加载配置文件
systemctl daemon-reload

# 配置containerd开机启动并现在启动
systemctl enable --now containerd

# 查看containerd状态
systemctl status containerd

# 若后续修改了config.toml配置需要重启containerd
systemctl restart containerd
# 配置crictl
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF

安装kubeadm、kubelet和kubectl

# 添加阿里软件源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
EOF

# 添加默认源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

# 查看可用的kubernetes版本
yum list available kubelet kubeadm kubectl

# 安装kubelet,kubeadm,kubectl(cluster节点可以不安装kubectl)
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
systemctl status kubelet

初始化Master节点

# 生成init-config文件
kubeadm config print init-defaults > init-config.yaml
# 下载kubernetes相关镜像
# 查看所需的镜像列表
kubeadm config images list

# 下载需要的镜像
kubeadm config images pull
# 初始化master节点
kubeadm init

# 记录join命令

# 为kubectl配置客户端的身份配置文件
# 方法一:
export KUBECONFIG=/etc/kubernetes/admin.conf
# 方法二:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

cluster节点加入集群

# 如果之前初始化master节点没有保存join命令,需要获取join命令
# 方法一:重新创建一个token
kubeadm token create --print-join-command
# 方法二:根据之前的token获取join命令
# 获取token
kubeadm token list
# 获取discovery-token-ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

可能需要的参考资料

### 部署和管理Java应用程序于阿里云Kubernetes #### 准备环境 确保Docker与Kubernetes已成功安装并配置完毕,这是进行后续操作的基础条件[^1]。 #### 构建Java应用镜像 利用`docker build`指令构建本地Java应用的Docker镜像之后,需打上特定标签以便上传至阿里云容器镜像仓库。例如: ```bash docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/k8s-javademo/javapro-demo-01:[镜像版本号] ``` 此命令中的`[ImageId]`应替换为实际构建所得的镜像ID,而`[镜像版本号]`则依据实际情况设定,这一步骤至关重要因为它决定了镜像在云端的位置与名称[^3]。 #### 推送镜像到远程仓库 执行如下命令推送之前标记好的镜像文件到阿里云提供的私有库中: ```bash docker push registry.cn-hangzhou.aliyuncs.com/k8s-javademo/javapro-demo-01:[镜像版本号] ``` 此举使得位于任意地理位置上的Kubernetes集群均能拉取该镜像用于部署工作负载。 #### 创建Deployment对象 编写YAML格式描述的应用定义文档,其中指定了所使用的镜像地址以及其他必要的参数设置;接着运用kubectl工具提交给API server处理从而实现自动化扩缩容等功能特性。示例代码片段可能看起来像是这样子: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: javapro-deployment spec: replicas: 3 selector: matchLabels: app: javapro template: metadata: labels: app: javapro spec: containers: - name: javapro-container image: 'registry.cn-hangzhou.aliyuncs.com/k8s-javademo/javapro-demo-01:[镜像版本号]' ports: - containerPort: 8080 ``` 上述模板里包含了关于Pod副本数量(`replicas`)、选择器规则(`selector`)以及容器内部端口映射等重要信息[^4]。 #### 发布Service服务 为了让外部能够访问运行着Web应用的服务组件,还需要额外声明一个名为Service的对象来暴露网络接口。下面是一个简单的例子说明如何创建ClusterIP类型的service: ```bash [root@master ~]# kubectl create -f k8shello-service.yaml service/k8shello-service created ``` 这里的`k8shello-service.yaml`应当包含有关目标端口号和服务类型的具体规定。 #### 使用不同版本的Kubernetes集群 根据具体需求可以选择适合自己的Kubernetes集群形式——专有版允许用户拥有更高的自定义权限但是也需要承担更多的责任;相比之下托管版简化了很多复杂度而且成本更低廉;至于Serverless形态更是进一步降低了入门门槛让开发者可以专注于业务逻辑而非底层设施维护方面的工作[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值