笑为先 發表於 2023-7-19 16:39:00

ubuntu20.04安装Kubernetes(k8s 1.27.4)

<br>
<p>官方文档:https://kubernetes.io/zh-cn/docs/home/</p>
<p>参考:https://www.cnblogs.com/wwph/p/14203626.html<br>
https://blog.csdn.net/wanghui2087/article/details/129329357<br>
kubeadm部署Kubernetes 网络插件:https://blog.csdn.net/cojn52/article/details/109449828</p>
<h3 id="1-禁止swap分区必须">1. 禁止swap分区(必须)</h3>
<p>暂时禁止:</p>
<pre><code class="language-shell">sudo swapoff -a
</code></pre>
<p>永久禁止:</p>
<pre><code class="language-shell"> # 注释掉swap一行
sudo vi /etc/fstab
</code></pre>
<h3 id="2-设置主机名">2. 设置主机名</h3>
<p>最下方添加:</p>
<pre><code class="language-shell">sudo vim /etc/hosts
192.168.2.5 master
</code></pre>
<h3 id="3-更改netbridgebridge-nf-call-iptables的值为1ubuntu-2004默认为1">3. 更改net.bridge.bridge-nf-call-iptables的值为1.(Ubuntu 20.04默认为1)</h3>
<pre><code class="language-shell">cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
</code></pre>
<h3 id="4-安装docker">4. 安装Docker</h3>
<pre><code class="language-shell">sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
</code></pre>
<h2 id="开始安装k8s">开始安装K8S</h2>
<h4 id="1安装kubeadm-kubeadm-kubectl">1.安装kubeadm kubeadm kubectl</h4>
<pre><code class="language-shell">sudo apt-get update &amp;&amp; sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list &lt;&lt;EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
</code></pre>
<h4 id="2初始化">2.初始化</h4>
<p>修改containerd的配置,因为containerd默认从k8s官网拉取镜像</p>
<pre><code class="language-shell">mkdir -p /etc/containerd
</code></pre>
<p>生成默认配置文件</p>
<pre><code class="language-shell">containerd config default | sudo tee /etc/containerd/config.toml
</code></pre>
<pre><code class="language-shell">vim /etc/containerd/config.toml
</code></pre>
<pre><code class="language-shell">
..................................
# 搜索sandbox_image,把原来的k8s.gcr.io/pause:3.6改为"registry.aliyuncs.com/google_containers/pause:3.9"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"       

..........................
SystemdCgroup = true                                        #搜索SystemdCgroup,把这个false改为true               

# 搜索config_path,配置镜像加速地址(这是一个目录下面创建)

   config_path = "/etc/containerd/certs.d"                       

# 创建镜像加速的目录
mkdir /etc/containerd/certs.d/docker.io -pv
# 配置加速
cat &gt; /etc/containerd/certs.d/docker.io/hosts.toml &lt;&lt; EOF
server = "https://docker.io"

capabilities = ["pull", "resolve"]
EOF

# 加载containerd的内核模块
cat &lt;&lt;EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

# 重启containerd
systemctl restart containerd
systemctl status containerd
</code></pre>
<p>初始化我们使用配置文件的方式进行部署</p>
<p><code>创建默认的kubeadm-config.yaml文件</code></p>
<pre><code class="language-shell">sudo kubeadm config print init-defaults&gt; kubeadm-config.yaml
</code></pre>
<p>我的配置文件:</p>
<p><strong>注意:就修改标注的这3处就可以了,其他还使用默认生成的配置,因为版本不一样。</strong></p>
<pre><code class="language-bash">apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.1.73 # 修改成本地内网ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
name: master # 修改成自定义的名称
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 使用阿里源
kind: ClusterConfiguration
kubernetesVersion: 1.22.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.244.0.0/16# 修改成10.244.0.0/16
scheduler: {}

</code></pre>
<p><code>安装master节点</code></p>
<pre><code class="language-bash"># 日志级别为 5 可能会产生大量的输出 可以方便我们查看报错信息
sudo kubeadm init --config kubeadm-config.yaml --v=5
</code></pre>
<p>如果<code>kubeadm init</code>初始化失败可以使用重置命令。</p>
<pre><code class="language-shell"># 重置
sudo kubeadm reset
</code></pre>
<h4 id="3看是否安装成功">3.看是否安装成功</h4>
<p>日志出现一下代码表示安装成功、然后根据步骤进行操作就OK了:</p>
<pre><code class="language-shell">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
</code></pre>
<h4 id="4排查问题">4.排查问题</h4>
<p>排查这类问题的方法是执行如下命令查看具体错误原因:</p>
<pre><code class="language-shell">journalctl -fxeu kubelet
</code></pre>
<p><code>查看端口是否被占用</code></p>
<pre><code class="language-shell">sudo netstat -tunlp | grep 10250
</code></pre>
<p>相关命令:</p>
<pre><code class="language-shell"># 验证k8s是否安装成功
kubectl get pods -n kube-system

sudo systemctl start kubelet
sudo systemctl start docker
</code></pre>
<p>与部署相关的常用命令:</p>
<pre><code class="language-bash">#创建部署
kubectl create -f k8s.yml
# 更新部署配置
kubectl apply -f k8s.yml
# 查看已部署pod
kubectl get service
kubectl get deployment

# 查看service下的所有pod的详情信息
kubectl describe service
# 查看service下的mysql的详情信息
kubectl describe service mysql

# 查看pod输出日志
kubectl logs [-f] pod名称

# 使用以下命令进入MySQL Pod的Shell
kubectl exec -it mysql -- /bin/bash

# 删除pod
kubectl delete deployment mysql

</code></pre>
<p><code>删除所有名称带有registry的镜像</code></p>
<pre><code class="language-shell">docker rmi $(docker images |grep "registry*"| awk '{print $3}')
</code></pre>
<p><code>删除命名以k8s开头的容器</code></p>
<pre><code class="language-shell">docker rm -f $(docker ps -a |grep "k8s*"| awk '{print $1}')
</code></pre>
<p>使用阿里源拉取k8s所需的镜像并修改名称脚本</p>
<pre><code class="language-shell">#!/bin/bash

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

for image in "${images[@]}"
do
    # echo "Pulling image registry.k8s.io/$image"
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$image

    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$image registry.k8s.io/$image

    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$image
done


</code></pre>


</div>
<div id="MySignature" role="contentinfo">
    从小白到大神的蜕变~~<br><br>
来源:https://www.cnblogs.com/tjw-bk/p/17566029.html
頁: [1]
查看完整版本: ubuntu20.04安装Kubernetes(k8s 1.27.4)