kubernetes单节点安装

官方安装文档:README-standalone.md · cookeem/kubeadm-ha - Gitee.com
 

 一、安装基础软件

1.apt-get -y update

apt-get -y update

可能遇到以下问题:

解决方法: 注释掉首行并保存,再次执行即可成功

vi etc/apt/sources.list

执行成功如下图:

2、apt-get install -y sudo wget ca-certificates curl gnupg htop git jq tree

apt-get install -y sudo wget ca-certificates curl gnupg htop git jq tree

成功如图:

3、apt-get -y install apt-transport-https ca-certificates curl software-properties-common

apt-get -y install apt-transport-https ca-certificates curl software-properties-common

成功如图:

二、安装docker-ce

创建目录用于存储APT密钥环

install -m 0755 -d /etc/apt/keyrings

添加Docker的官方GPG密钥

curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -

添加Docker CE的APT仓库:

add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable"

更新软件包列表

apt-get -y update

安装Docker CE及相关组件

apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose

无报错,即安装成功

三、检查docker 版本并设置参数

1、检查docker版本

docker version

正确安装如下图:

2、设置docker参数


# 支持国内dockerhub镜像 文档参见: https://github.com/DaoCloud/public-image-mirror

cat << EOF > /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "registry-mirrors": [
      "https://docker.m.daocloud.io"
    ]
}
EOF

3、 重启docker服务并检查运行状态

# 重启docker服务
systemctl restart docker
systemctl status docker

# 验证docker服务是否正常
docker images

4、拉取并运行测试镜像

# 拉取测试镜像
docker pull busybox

# 运行测试镜像
docker run --rm busybox uname -m

#查看是否拉取成功
docker images

四、安装kubernetes

# 安装kubernetes相关组件
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get -y update
apt-get install -y kubelet kubeadm kubectl
kubeadm version

1、添加阿里云Kubernetes仓库的GPG密钥

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

2、创建Kubernetes的APT源列表文件

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

3、更新软件包列表

apt-get -y update

4、安装Kubernetes组件

apt-get install -y kubelet kubeadm kubectl

5、检查kubeadm版本

kubeadm version

安装成功如图:

列出kubeadm配置所需的所有镜像

kubeadm config images list --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

导出pause镜像的名称到环境变量PAUSE_IMAGE

export PAUSE_IMAGE=$(kubeadm config images list --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers | grep pause)

检查环境变量是否设置成功:

# 注意pause镜像用于配置cri-dockerd的启动参数
# 应该是输出 registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
echo $PAUSE_IMAGE

安装cri-dockerd,用于连接kubernetes和docker

下载cri-dockerd压缩包

可能会重连很多次,耐心等待

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.15/cri-dockerd-0.3.15.amd64.tgz

解压下载的压缩包

tar zxvf cri-dockerd-0.3.15.amd64.tgz

进入解压后的目录

cd cri-dockerd/

创建目标安装目录并设置权限

mkdir -p /usr/local/bin
install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd

创建cri-docker.socket启动文件

cat << EOF > /etc/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

创建cri-docker.service启动文件

# 创建cri-docker.service启动文件
# 注意设置pause容器镜像信息 --pod-infra-container-image=$PAUSE_IMAGE
cat << EOF > /etc/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=$PAUSE_IMAGE
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

启动cri-dockerd

# 启动cri-dockerd
# 重新加载systemd配置:
systemctl daemon-reload 
# 启用并立即启动cri-docker.socket:
systemctl enable --now cri-docker.socket
# 重启cri-docker服务:
systemctl restart cri-docker
# 检查cri-docker服务的状态:
systemctl status cri-docker

通过kubeadm预先拉取所需的容器镜像

# 通过kubeadm预先拉取所需的容器镜像
kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock

# 查看拉取的镜像
docker images

# 部署前清理旧的安装配置
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock

# 使用kubeadm初始化kubernetes集群
kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock

# 在所有master节点上设置kubectl访问kubernetes集群
# 创建.kube目录:
mkdir -p $HOME/.kube
# 复制admin.conf文件:
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 更改文件权限:
chown $(id -u):$(id -g) $HOME/.kube/config

# 在所有master节点上设置kubectl的自动完成,可以通过键盘TAB键自动补全子命令和参数
# 查看kubectl completion的帮助信息
kubectl completion -h
# 生成Bash自动补全脚本并保存到文件中:
kubectl completion bash > ~/.kube/completion.bash.inc
# 将source命令添加到.bash_profile文件中:
printf "
# Kubectl shell completion
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile
# 重新加载.bash_profile以应用更改:
source $HOME/.bash_profile

# 检查节点就绪状态,未安装网路网络组件,节点状态为 NOT READY
kubectl get nodes

# 检查pod状态,coredns状态为Pending
kubectl -n kube-system get pods
NAME                               READY   STATUS    RESTARTS   AGE
coredns-6554b8b87f-5r58j           0/1     Pending   0          2m40s
coredns-6554b8b87f-wcbx7           0/1     Pending   0          2m40s
etcd-k8s-demo                      1/1     Running   0          2m45s
kube-apiserver-k8s-demo            1/1     Running   0          2m45s
kube-controller-manager-k8s-demo   1/1     Running   0          2m48s
kube-proxy-6vtzw                   1/1     Running   0          2m40s
kube-scheduler-k8s-demo            1/1     Running   0          2m45s
# 在k8s-demo节点上安装cilium网络组件
# 下载Cilium CLI:
wget https://github.com/cilium/cilium-cli/releases/download/v0.16.16/cilium-linux-amd64.tar.gz
# 解压下载的文件:
tar zxvf cilium-linux-amd64.tar.gz 
# 移动cilium到系统路径中:
mv cilium /usr/local/bin/
# 使用Cilium CLI安装Cilium:
cilium install --set cni.chainingMode=portmap

# 检查cilium部署情况  
kubectl -n kube-system get pods

# 检查节点就绪状态
kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
k8s-demo   Ready    control-plane   3m15s   v1.28.2

# 设置所有master允许调度pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

# 测试部署应用到kubernetes集群
# 部署一个nginx应用,并暴露到nodePort31000
kubectl run nginx --image=nginx --image-pull-policy=IfNotPresent --port=80 -l=app=nginx
kubectl create service nodeport nginx --tcp=80:80 --node-port=31000

# 检查pod状态
kubectl get pods,svc

# 检查服务是否可以访问
curl k8s-demo:31000

cilium部署成功图: 部署需要时间

检查服务时:请替换 curl k8s-demo:31000的k8s-demo值为:

五、安装kubernetes-dashboard

# 安装helm
wget https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz
tar zxvf helm-v3.15.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
rm -rf linux-amd64/

# 测试helm
helm --help

# 添加 kubernetes-dashboard helm chart 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

# 把helm chart 下载到本地
helm fetch kubernetes-dashboard/kubernetes-dashboard --untar

# 获取镜像
docker pull kubernetesui/dashboard-auth:1.1.3
docker pull kubernetesui/dashboard-api:1.7.0
docker pull kubernetesui/dashboard-web:1.4.0
docker pull kubernetesui/dashboard-metrics-scraper:1.1.1
docker pull kong:3.6

# 设置 kubernetes-dashboard 的部署配置
cat << EOF > kubernetes-dashboard.yaml
auth:
  image:
    repository: kubernetesui/dashboard-auth
    tag: 1.1.3
api:
  image:
    repository: kubernetesui/dashboard-api
    tag: 1.7.0
web:
  image:
    repository: kubernetesui/dashboard-web
    tag: 1.4.0
metricsScraper:
  image:
    repository: kubernetesui/dashboard-metrics-scraper
    tag: 1.1.1
EOF

# 部署 kubernetes-dashboard
kubectl create namespace kubernetes-dashboard --dry-run=client -o yaml | kubectl apply -f -
helm install -n kubernetes-dashboard kubernetes-dashboard kubernetes-dashboard/ -f kubernetes-dashboard.yaml

# # 如果需要删除kubernetes-dashboard可以执行以下命令
# helm uninstall -n kubernetes-dashboard kubernetes-dashboard

# 删除kong的管理界面
kubectl -n kubernetes-dashboard delete svc kubernetes-dashboard-kong-manager

# 把kubernetes-dashboard暴露到30000端口
kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard-kong-proxy --type json --patch '
[
  {
    "op": "replace",
    "path": "/spec/type",
    "value": "NodePort"
  }
]'

kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard-kong-proxy --type json --patch '
[
  {
    "op": "replace",
    "path": "/spec/ports/0/nodePort",
    "value": 30000
  }
]'

# 检查部署的pods
kubectl -n kubernetes-dashboard get pods

# 检查部署的services
kubectl -n kubernetes-dashboard get services

# 创建管理员serviceaccount
kubectl create serviceaccount -n kube-system admin-user --dry-run=client -o yaml | kubectl apply -f -

# 创建管理员clusterrolebinding
kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kube-system:admin-user --dry-run=client -o yaml | kubectl apply -f -

# 手动创建serviceaccount的secret
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: admin-user-secret
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token
EOF

# 获取kubernetes管理token
kubectl -n kube-system get secret admin-user-secret -o jsonpath='{ .data.token }' | base64 -d

# 使用浏览器访问kubernetes-dashboard: https://xxx:30000
# 使用kubernetes管理token登录kubernetes-dashboard

六、安装metrics-server

# 拉取镜像
docker pull k8s.m.daocloud.io/metrics-server/metrics-server:v0.7.1
docker tag k8s.m.daocloud.io/metrics-server/metrics-server:v0.7.1 registry.k8s.io/metrics-server/metrics-server:v0.7.1

# 获取metrics-server安装yaml
curl -O -L https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml

# 添加--kubelet-insecure-tls参数
sed -i 's/- args:/- args:\n        - --kubelet-insecure-tls/g' components.yaml

# 安装metrics-server
kubectl apply -f components.yaml

# # 删除metrics-server
# kubectl delete -f components.yaml

# 等待metrics-server正常
kubectl -n kube-system get pods -l=k8s-app=metrics-server

# 查看节点的性能指标
kubectl top nodes

# 查看所有pods的性能指标
kubectl top pods -A

注意:记得开放对应的端口以访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值