Ubuntu开发环境搭建

Ubuntu 安装

查看系统版本

uname -a:可以看到操作系统的发行版号和操作系统版本
lsb_release -a:可以查看发行版本信息

修改时区

# 在界面中按照提示选择对应的时区即可
sudo dpkg-reconfigure tzdata

更改 shell 解释器

ubuntu 默认的 shell 解释器是 dash,会出现 source: command not found 问题,需要更改解释器为 bash

# 查看是否是 dash 解释器
ls -l /bin/sh

# 更改为使用 bash,执行下面语句,选择 no
sudo dpkg-reconfigure dash

# 查看是否已切换回 bash
ls -l /bin/sh

换源

查看系统版:cat /etc/os-release

  • 阿里源:https://mirrors.aliyun.com/ubuntu/
  • 清华源:https://mirrors.tuna.tsinghua.edu.cn/ubuntu/

ubuntu 源的配置文件为 /etc/apt/sources.list

# 换源
sudo sed -i 's/http:\/\/cn.archive.ubuntu.com/https:\/\/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新源信息
sudo apt update

包管理工具简介

能用 apt 就用 apt。apt 增强了一些 apt-get的配置,统一了 apt-get 和 apt-cache

虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令。也就是说,可以用 apt 替换部分 apt-get 系列命令,但不是全部。

apt 命令取代的命令命令的功能
apt installapt-get install安装软件包
apt removeapt-get remove移除软件包
apt purgeapt-get purge移除软件包及配置文件
apt updateapt-get update刷新存储库索引
apt upgradeapt-get upgrade升级所有可升级的软件包
apt autoremoveapt-get autoremove自动删除不需要的包
apt full-upgradeapt-get dist-upgrade在升级软件包时自动处理依赖关系
apt searchapt-cache search搜索应用程序
apt showapt-cache show显示装细节
apt list列出包含条件的包(已安装,可升级等)
apt edit-sources编辑源列表

要大家注意的是:apt 命令也还在不断发展, 因此,你可能会在将来的版本中看到新的选项。

基础软件安装

vim 安装

sudo apt install vim

配置 vim

  1. 复制配置文件

    sudo cp /usr/share/vim/vimrc ~/.vimrc

  2. 配置

    syntax on                       开启语法高亮
    set nu!                         显示行号
    set nocompatible                "去掉有关vi一致性模式,避免以前版本的bug和局限
    set guifont=Luxi/ Mono/ 9       "设置字体,字体名称和字号
    filetype on                     "检测文件的类型     
    set history=1000                "记录历史的行数
    set background=dark             "背景使用黑色====
    set autoindent                  "vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
    set cindent                     "(cindent是特别针对 C语言语法自动缩进)
    set smartindent                 "依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用   
    set tabstop=4                   "设置tab键为4个空格,
    set shiftwidth =4               "设置当行之间交错时使用4个空格     
    set ai!                         " 设置自动缩进 
    set showmatch                   "设置匹配模式,类似当输入一个左括号时会匹配相应的右括号      
    set guioptions-=T               "去除vim的GUI版本中得toolbar   
    set ruler                       "在编辑过程中,在右下角显示光标位置的状态行     
    set nohls                       "默认情况下,寻找匹配是高亮度显示,该设置关闭高亮显示     
    set backspace=2                 "设置退格键可用
    

网络三件套

# ping
sudo apt install inetutils-ping
# ifconfig
sudo apt install net-tools
# ip
sudo apt install iproute2

配置合盖不休眠和关闭显示屏

ubuntu 环境是搭建在了自己不用的老笔记本电脑生,为了省电就想着把屏幕关掉,对应的配置如下

vim /etc/systemd/logind.conf

找到#HandleLidSwitch这一行,意思是合上笔记本上盖后的行为,默认suspend,修改为ignore(即合盖不休眠)。然后还要去掉前面的#。保存文件。之后执行下面语句

sudo service systemd-logind restart

关闭屏幕

sudo apt install vbetool

# 关闭显示器
sudo vbetool dpms off
# 打开显示器
sudo vbetool dpms on

软件环境安装

java 安装

去官网下载 JDK,然后执行下面命令

# 解压到 /usr/local/
sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
# 重命名文件夹
sudo mv /usr/local/jdk-17.0.7/ /usr/local/java/

配置环境变量

sudo vim /etc/profile

# 指向配置、日志和数据文件所在的目录。 确保该目录存在并且已授予适当的权限
export JAVA_HOME="/usr/local/java"
export PATH=$JAVA_HOME/bin:$PATH

加载环境变量:source /etc/profile

maven 安装

# 下载安装包
sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz
# 解压到 /usr/local/
sudo tar -zxvf apache-maven-3.9.3-bin.tar.gz -C /usr/local/
# 重命名文件夹
sudo mv /usr/local/apache-maven-3.9.3/ /usr/local/maven/

配置阿里源

sudo vim /usr/local/maven/conf/settings.xml

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>aliyunmavenpublic</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

配置环境变量

sudo vim /etc/profile

# 指向配置、日志和数据文件所在的目录。 确保该目录存在并且已授予适当的权限
export MAVEN_HOME="/usr/local/maven"
export PATH=$MAVEN_HOME/bin:$PATH

加载环境变量:source /etc/profile

Docker

官方安装文档

# 卸载冲突包(之前可能安装的包)
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 删除卸载残留的镜像(可选)
rm -rf /var/lib/docker/

# 更新仓库索引
sudo apt-get update
# 这些依赖用于确保可以使用 https 的 docker 仓库
sudo apt-get install ca-certificates curl gnupg

# 添加 Docker 的官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 设置 docker 存储库
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新仓库索引
sudo apt-get update
# 安装最新docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


# 以下为输出内容
# 一些依赖在安装docker 的时候被更新了,需要重启服务已使用最新的依赖
Daemons using outdated libraries
--------------------------------

  1. systemd-journald.service  3. systemd-manager           5. systemd-resolved.service   7. user@1000.service
  2. systemd-logind.service    4. systemd-networkd.service  6. systemd-timesyncd.service  8. none of the above

(Enter the items or ranges you want to select, separated by spaces.)

Which services should be restarted? 8

# 查看 docker 服务是否启动
sudo systemctl status docker
# 验证是否成功
sudo docker run hello-world

配置 docker 镜像仓库

sudo mkdir -p /etc/docker 

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

重启 docker 服务

sudo systemctl daemon-reload
sudo systemctl restart docker

GitLab 安装(docker)

官方安装地址

设置环境变量

sudo vim /etc/profile

# 指向配置、日志和数据文件所在的目录。 确保该目录存在并且已授予适当的权限
export GITLAB_HOME=/srv/gitlab

加载环境变量:sudo source /etc/profile

极狐GitLab 容器使用主机装载的卷来存储持久数据:

本地路径容器路径用途
$GITLAB_HOME/data/var/opt/gitlab用于存储应用程序数据
$GITLAB_HOME/logs/var/log/gitlab用于存储日志
$GITLAB_HOME/config/etc/gitlab用于存储 GitLab 配置文件

正式安装

# 拉取镜像
sudo docker pull registry.gitlab.cn/omnibus/gitlab-jh:latest

# 启动容器
# 443 https 80 http 22 ssh
sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 2200:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  registry.gitlab.cn/omnibus/gitlab-jh:latest

# 跟踪启动日志
sudo docker logs -f gitlab
# 查看初始密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

应为 22 端口被 ssh 使用,这里改为了使用 2200 端口

安装完成后可以访问 http://localhost:80 进入 jenkins

gitlab 相关容器

jenkins 安装(docker)

官方文档地址

# 创建 jenkins 的专用网络
sudo docker network create jenkins
# 拉取镜像
sudo docker pull docker:dind
# 用于使得 jenkins 容器内也可使用 docker
sudo docker run --name jenkins-docker --restart always --detach \
  --privileged --network jenkins --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
  --publish 2376:2376 \
  docker:dind --storage-driver overlay2

--rm:可以不加,避免停止容器后 jenkins 容器被自动删除
--restart always:可以添加此参数,保证容器可以总是启动
/var/jenkins_home:是 jenkins 的工作目录,配置文件、插件、workspace 等都放在此目录下

创建 Dockerfile 文件

官方的镜像是可以直接启动使用的,但是如果需要使用 blueocean 等功能就需要在官方镜像的基础上自定义镜像,添加上述插件

vim Dockerfile

FROM jenkins/jenkins:2.401.2-lts-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --help

官方脚本的最后一句是 RUN jenkins-plugin-cli --plugins "blueocean docker-workflow" 表示要为 jenkins 安装 blueocean、docker-workflow 两个插件,但是由于网络原因会下载失败,所以我在此处做出了修改,等到启动 jenkins 服务后再安装

启动 jenkins 容器

# 拉取镜像
sudo docker pull jenkins/jenkins:2.401.2-lts-jdk17
# 建立 jenkins 镜像
sudo docker build -t myjenkins-blueocean:2.401.2-1 .

# 启动容器
sudo docker run --name jenkins-blueocean --restart=on-failure --detach \
  --network jenkins --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  myjenkins-blueocean:2.401.2-1

数据卷在 /var/lib/docker/volumes/ 目录下
可以使用 http://[jenkins-server-address][:port]/[command] 的方式信息启动
command 的值可以是

  • exit 停止 jenkins
  • restart 重启 jenkins
  • reload 重新加载配置文件

安装完成后可以访问 http://localhost:8080 进入 jenkins

初始登录界面

初始密码的查看方式:sudo docker exec jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword

因为此时还未配置 jenkins 插件镜像,插件安装会出现网络问题。所以点击自定义插件安装,选择“无”,即不安装任何插件

在这里插入图片描述

创建一个管理员账户,点击保存完成

在这里插入图片描述

无特殊要求的话, URL 默认即可
在这里插入图片描述

配置 jenkins 镜像源

manage jenkins -> Plugins -> Advanced settings -> Update Site

在这里插入图片描述

可用的源有

  • 阿里源:https://mirrors.aliyun.com/jenkins/updates/update-center.json
  • 清华源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

在浏览器中输入 http://[jenkins-server-address][:port]/restart 重启 jenkins,以使配置生效

补全 blueocean 、docker-workflow 插件,安装中文插件

在这里插入图片描述

在这里插入图片描述

docker-workflow 对应的插件名称为 Docker Pipeline

在这里插入图片描述

在浏览器中输入 http://[jenkins-server-address][:port]/restart 重启 jenkins,以使插件生效

jenkins 相关容器

harbor(本地安装)

官方安装地址

# 下载安装文件
sudo wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
# 解压
sudo tar -zxvf harbor-offline-installer-v2.8.2.tgz
# 进入解压文件夹
cd harbor/
# 复制一份配置文件
sudo cp harbor.yml.tmpl harbor.yml

配置

因为是自己的开发环境,不考虑安全问题,所以注释掉相关 https 配置

配置文件地址

sudo vim harbor.yml
在这里插入图片描述

# 运行安装脚本
sudo ./install.sh

安装成功后可以通过 http://[harbor-server-address][:port]/ 访问,默认用户名为 admin

harbor相关容器

配置 docker

因为 docker 默认不使用 http,需要设置忽略安全性的 http 地址

sudo vim /etc/docker/daemon.json

{
    "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"],
    "insecure-registries": ["192.168.1.8:10001"]
}

重启 docker 服务

sudo systemctl daemon-reload
sudo systemctl restart docker

docker 登录 harbor

docker login -u 用户名 -p 密码 harbor-server-address:port

Kubernets 安装

kubeadm 是一个简化 kubernets 集群安装的命令行工具, 本文使用 kubeadm 进行安装。

前提需要安装 docker 或者其他 CRI 容器

系统环境设置

禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

vim /etc/fstab,注释掉swap分区一行,如下所示

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# /dev/disk/by-uuid/8bf7e345-3ab8-47a0-a8b1-1a5d723100af none swap sw 0 0

改完毕之后需要重启linux服务

禁用iptable和firewalld服务

ubuntu 默认没有这两个服务,可以不配置

# 安装防火情
sudo apt install ufw
# 关闭防火墙
sudo systemctl stop ufw
sudo systemctl disable ufw


# 关闭iptables服务
sudo systemctl stop iptables
sudo systemctl disable iptables

禁用 iptable 的原因是为了使用性能更好的 ipvs

禁用selinux

unbuntu 默认没有安装

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启linux服务
SELINUX=disabled
修改linux的内核参数

sudo vim /etc/sysctl.d/kubernetes.conf,添加以下内容,是k8s必须的内核参数

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

配置 ipvs

sudo apt install ipset ipvsadm

# 1.安装依赖
sudo apt install ipset ipvsadm

# 2.配置
sudo cat <<EOF> /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
# 这里顺便把这个模块也加上
br_netfilter
EOF

kernel_version > 4.19 时配置 nf_conntrack,否则配置 nf_conntrack_ipv4

执行以下命令

# 临时重新加载内核参数配置
sudo sysctl -p
# 临时加载模块
modprobe br_netfilter
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

可以重启查看对应的模块是否可以在开机时加载成功

# 查看网桥过滤模块是否加载成功
sudo lsmod | grep br_netfilter
# 重启查看对应的模块是否加载成功
sudo lsmod | grep -e ip_vs -e nf_conntrack

/etc/sysctl.d/目录下是放置内核参数配置文件的地方,这个目录中的所有配置文件都会在系统启动时被加载,使得这些内核参数在整个系统范围内生效
/etc/modules-load.d/目录下是放置内核模块配置文件的地方,系统启动时无条件读取配置文件加载的相应的内核模块
br_netfiler作用:br_netfilter模块可以使 iptables 规则可以在 Linux Bridges 上面工作,用于将桥接的流量转发至iptables链

cri-dockerd 适配器

自 1.24 版起,Dockershim 已从 Kubernetes 项目中移除,新版本 k8s 默认不支持 docker 作为运行时容器,需要安装 cri-dockerd 适配器

0.2.5及以后默认的网络插件时 cni,为了k8s使集群能够运行,应使用 Calico、Flannel、Weave 或其他 CNI

# 下载软件包
sudo wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.5/cri-dockerd_0.3.5.3-0.ubuntu-jammy_amd64.deb

# 安装软件包
sudo dpkg -i cri-dockerd_0.3.5.3-0.ubuntu-jammy_amd64.deb

安装完成后相关的文件路径

Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /lib/systemd/system/cri-docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/cri-docker.socket → /lib/systemd/system/cri-docker.socket

官方配置参考

配置 docker 的 cgroupdriver

Docker 在默认情况下使用cgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs

sudo vim /etc/docker/daemon.json,添加如下一行配置

"exec-opts": ["native.cgroupdriver=systemd"]

重启 docker:sudo systemctl restart docker

时间同步

sudo apt install chrony:安装时间同步服务

sudo apt install chrony
sudo systemctl start chronyd
  1. 主节点配置

修改配置如下 vim /etc/chrony/chrony.conf

# 容许此网段的客户端可以通过本机获取时间同步
allow 192.168.1.0/24
# 在本机无法链接网络获取精准时间时,仍然容许其他客户端可以通过本机获取时间同步
local stratum 10

重启服务

sudo systemctl restart chronyd
  1. 其他节点配置

修改配置如下 vim /etc/chrony/chrony.conf

server 192.168.1.6 iburst

重启服务

sudo systemctl restart chronyd
sudo chronyc sources -v


  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 192.168.1.6                 10   6    17     3  +6755ns[ +242us] +/-   39us

host 设置

vim /etc/hosts

192.168.1.6      master
192.168.1.8      node1

unbuntu 不包含 selinux,无需额外禁用

配置Kubernetes 包存储库

从 2023 年 8 月开始,Kubernetes 有两个不同的软件包存储库。Google 托管的存储库已被弃用,并将被 Kubernetes(社区拥有)软件包存储库取代。 以下使用社区仓库

sudo apt-get update
# apt-transport-https 可能已经变为虚拟包,如果如此可以跳过安装
sudo apt-get install -y apt-transport-https ca-certificates curl

# 下载 Kubernetes 包存储库的公共签名密钥。所有存储库都使用相同的签名密钥,因此您可以忽略 URL 中的版本
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 添加适当的 Kubernetes apt 存储库
sudo echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并固定其版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

在 Debian 12 和 Ubuntu 22.04 之前的版本中,默认情况下 /etc/apt/keyrings 不存在;您可以通过运行 sudo mkdir -m 755 /etc/apt/keyrings 创建它

本地提前准备好 k8s 所需要的镜像

由于外网不通,在安装kubernetes集群之前,可以使用国内源提前准备好集群需要的镜像,所需镜像可以通过下面命令查看

kubeadm config images list

将上述命令的输出结果替换到下列命令中执行

images=(
	kube-apiserver:v1.28.2
	kube-controller-manager:v1.28.2
	kube-scheduler:v1.28.2
	kube-proxy:v1.28.2
	pause:3.9
	etcd:3.5.9-0
	coredns:v1.10.1
)

for imageName in ${images[@]};do
	sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
	sudo docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

初始化控制节点

控制平面节点是运行控制平面组件的机器,包括 etcd(集群数据库)和 API Server(kubectl 命令行工具与之通信)

执行以下命令初始化集群

sudo kubeadm init --apiserver-advertise-address=192.168.1.8 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.28.2 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock

从 v1.22 开始,使用 kubeadm 创建集群时, 如果用户没有设置 KubeletConfiguration 下的 cgroupDriver 字段,kubeadm 默认为 systemd。手动配置的方法
--control-plane-endpoint:可以配置为 DNS 或 高可用的负载 ip,已实现集群的高可用
--pod-network-cidr:根据选用的网络插件的不同,一些网络插件可能需要设置此配置指明 pod 网络可以使用的 IP 地址段
--cri-socket:(可选)在机器上有多个容器运行时环境时,用于指定使用哪一个容器运行时环境
--apiserver-advertise-address:控制节点API 服务器的通告地址,默认使用默认网关关联的网卡
--image-repository:选择用于拉取控制平面镜像的容器仓库
--service-cidr:为服务的虚拟 IP 地址另外指定 IP 地址段
--service-dns-domain:为服务另外指定域名

kubeadm文档
kubeadm结合配置文件进行配置

启动日志里提到推荐使用 pause:3.9,可以做如下配置

sudo vim /lib/systemd/system/cri-docker.service,添加 --pod-infra-container-image 参数指定镜像即可

[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/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
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
# 重新加载
sudo systemctl daemon-reload
sudo systemctl restart cri-docker.service

使用命令 sudo kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock 重设集群,按提示删除对应的配置文件,然后再重新初始化集群

集群初始成功后,按照输出信息如下

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

You should now deploy a Pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  /docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

按上述信息执行如下命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

添加网络插件,可选插件列表,本文选用 flannel 插件

sudo wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 由于网络原因,可以先打开 kube-flannel.yml 
# 看看要拉取的镜像有哪些,可以替换仓库或提前拉取下来
sudo docker pull docker.io/flannel/flannel:v0.22.3
sudo docker pull docker.io/flannel/flannel-cni-plugin:v1.2.0

# 不加 sudo 可以成功,因为会使用 $HOME/.kube 下的配置
kubectl apply -f kube-flannel.yml

# 查看节点状态,如果变为 ready 即可
kubectl get nodes
# 输出中的 CoreDNS Pod 是否为 Running 来确认其是否正常工作
kubectl get pods --all-namespaces

设置控制节点可以创建 pod

# 使能控制节点可以创建 pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
# 禁止控制节点可以创建 pod
kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值