{"id":621,"date":"2021-10-31T19:46:07","date_gmt":"2021-10-31T11:46:07","guid":{"rendered":"https:\/\/www.luyouli.com\/?p=621"},"modified":"2021-11-12T13:25:41","modified_gmt":"2021-11-12T05:25:41","slug":"ubuntu-20-04-%e9%83%a8%e7%bd%b2kubernetes-1-22-%e9%9b%86%e7%be%a4","status":"publish","type":"post","link":"https:\/\/www.luyouli.com\/?p=621","title":{"rendered":"Ubuntu 20.04 \u90e8\u7f72kubernetes 1.22 \u96c6\u7fa4"},"content":{"rendered":"\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<p>\u7531\u4e8e\u4f17\u6240\u5468\u77e5\u7684\u539f\u56e0\uff08F**K \u7ea2X\uff09\uff0cCentOS8\u7684\u751f\u547d\u5468\u671f\u5c31\u5feb\u7ed3\u675f\u4e86\uff0c\u7cfb\u7edf\u8981\u8f6c\u5165Ubuntu\u7684\u6000\u62b1\u4e86\uff0c\u4e0d\u8fc7\u8fd8\u597d\u6240\u6709\u7684\u5e94\u7528\u90fd\u6254\u5230kubernetes\u4e0a\u4e86\uff0c\u8fc1\u79fb\u7684\u96be\u5ea6\u5927\u5927\u964d\u4f4e\u3002\u8fd1\u671f\u5728\u505aUbuntu\u7684\u6d4b\u8bd5\uff0c\u6b63\u597d\u628a\u5728ubuntu 20.04 LTS \u4e0a\u90e8\u7f72\u6700\u65b0\u7684kubernetes\u8bb0\u5f55\u4e0b\u6765<\/p>\n\n\n\n<p id=\"block-29b81412-1600-4410-b2f5-3f91a0970716\">\u57fa\u7840\u73af\u5883\uff1a <\/p>\n\n\n\n<p id=\"block-29b81412-1600-4410-b2f5-3f91a0970716\">\u7cfb\u7edf\uff1aubuntu 20.04 LTS <\/p>\n\n\n\n<p id=\"block-29b81412-1600-4410-b2f5-3f91a0970716\">master\uff1a172.19.82.170 <\/p>\n\n\n\n<p id=\"block-29b81412-1600-4410-b2f5-3f91a0970716\">slave1\uff1a172.19.82.192 <\/p>\n\n\n\n<p id=\"block-29b81412-1600-4410-b2f5-3f91a0970716\">slave2\uff1a172.19.82.160<\/p>\n\n\n\n<p>\u57fa\u7840\u7ec4\u4ef6\uff1a<\/p>\n\n\n\n<p>$ sudo su# apt update &amp;&amp; apt upgrade -y &amp;&amp; init 6<\/p>\n\n\n\n<p># apt install -y net-tools lrzsz htop<br><\/p>\n\n\n\n<p>\u914d\u7f6e\u65f6\u95f4\u5e76\u4ee4\u65f6\u95f4\u6233\u7acb\u5373\u751f\u6548<\/p>\n\n\n\n<p># timedatectl set-timezone Asia\/Shanghai &amp;&amp; systemctl restart rsyslog<br><\/p>\n\n\n\n<p>\u8bbe\u7f6ehosts\u89e3\u6790\uff1a<\/p>\n\n\n\n<p># hostnamectl set-hostname master &amp;&amp; bash<\/p>\n\n\n\n<p># hostnamectl set-hostname slave1 &amp;&amp; bash<\/p>\n\n\n\n<p># hostnamectl set-hostname slave2 &amp;&amp; bash<\/p>\n\n\n\n<p># cat &gt;&gt; \/etc\/hosts&lt;&lt; EOF<\/p>\n\n\n\n<p>172.19.82.170 master<\/p>\n\n\n\n<p>172.19.82.192 slave1<\/p>\n\n\n\n<p>172.19.82.160 slave2<\/p>\n\n\n\n<p>EOF<\/p>\n\n\n\n<p>\u5173\u95edSWAP\uff08\u8fc7\u4e8e\u7b80\u5355\u5c31\u4e0d\u5199\u4e86\uff09<\/p>\n\n\n\n<p>\u5173\u95edselinux\u548c\u9632\u706b\u5899 \uff08\u8fc7\u4e8e\u7b80\u5355\u5c31\u4e0d\u5199\u4e86\uff09 <\/p>\n\n\n\n<p>\u4fee\u6539\u5185\u6838\u53c2\u6570\uff1a<\/p>\n\n\n\n<p># cat &gt;&gt; \/etc\/sysctl.conf &lt;&lt; EOF<\/p>\n\n\n\n<p>net.bridge.bridge-nf-call-ip6tables = 1<\/p>\n\n\n\n<p>net.bridge.bridge-nf-call-iptables = 1<\/p>\n\n\n\n<p>net.ipv4.ip_forward = 1<\/p>\n\n\n\n<p>vm.max_map_count = 262144EOF<\/p>\n\n\n\n<p># modprobe br_netfilter &amp;&amp; sysctl -p \/etc\/sysctl.conf<\/p>\n\n\n\n<p>\u8bbe\u7f6erp_filter\u7684\u503c <\/p>\n\n\n\n<p>kubernetes\u96c6\u7fa4\u5982\u679c\u4f7f\u7528\u7684\u662fcalico\u7f51\u7edc\u63d2\u4ef6\uff0c\u90a3\u4e48\u8981\u6c42\u4e0b\u9762\u4e24\u4e2a\u5185\u6838\u53c2\u6570\u4e3a0\u6216\u80051\uff0cubuntu20.04\u9ed8\u8ba4\u662f2 <\/p>\n\n\n\n<p># vim \/etc\/sysctl.d\/10-network-security.conf <\/p>\n\n\n\n<p>net.ipv4.conf.default.rp_filter=1 <\/p>\n\n\n\n<p>net.ipv4.conf.all.rp_filter=1 <\/p>\n\n\n\n<p># sysctl &#8211;system<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u5b89\u88c5docker-ce\n# apt remove docker docker-engine docker.io containerd runc\n# apt-get install ca-certificates \\curl gnupg lsb-release\n# curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\n# echo \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\n# apt update\n# apt install docker-ce docker-ce-cli containerd.io\n# systemctl enable docker\n# mkdir \/etc\/docker\/\n# vim \/etc\/docker\/daemon.json\n{\n        \"exec-opts\":[\"native.cgroupdriver=systemd\"]\n}\n# systemctl restart docker<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u5b89\u88c5kubernetes 1.22\n# apt install ca-certificates curl software-properties-common apt-transport-https curl\n# curl -s https:\/\/mirrors.aliyun.com\/kubernetes\/apt\/doc\/apt-key.gpg | sudo apt-key add -\n# cat &gt;&gt; \/etc\/apt\/sources.list.d\/kubernetes.list &lt;&lt;EOF \ndeb https:\/\/mirrors.aliyun.com\/kubernetes\/apt\/ kubernetes-xenial main\nEOF\n# apt update &amp;&amp; apt install -y kubelet kubeadm kubectl\n# apt-mark hold kubelet kubeadm kubectl    # \u5982\u679c\u9700\u8981\u9501\u5b9a\u7248\u672c\u4f7f\u7528\u8fd9\u4e2a\u547d\u4ee4\n# apt-mark unhold kubelet kubeadm kubectl  # \u89e3\u9501\n# kubeadm version\nkubeadm version: &amp;version.Info{Major:\"1\", Minor:\"22\", GitVersion:\"v1.22.2\", GitCommit:\"8b5a19147530eaac9476b0ab82980b4088bbc1b2\", GitTreeState:\"clean\", BuildDate:\"2021-09-15T21:37:34Z\", GoVersion:\"go1.16.8\", Compiler:\"gc\", Platform:\"linux\/amd64\"}\n# systemctl enable kubelet\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u4fee\u6539\u914d\u7f6e\u6587\u4ef6   # \u53ea\u5728master\u8282\u70b9\u64cd\u4f5c\n# kubeadm config print init-defaults &gt; kubeadm.yaml\n# vim kubeadm.yaml       \u4fee\u6539&amp;\u65b0\u589e4\u5904\napiVersion: kubeadm.k8s.io\/v1beta3\nbootstrapTokens:\n- groups:\n  - system:bootstrappers:kubeadm:default-node-token\n  token: abcdef.0123456789abcdef\n  ttl: 24h0m0s\n  usages:\n  - signing\n  - authentication\nkind: InitConfiguration\nlocalAPIEndpoint:\n  advertiseAddress: 172.19.82.170   # \u4fee\u6539\u4e3amaster\u8282\u70b9IP\n  bindPort: 6443\nnodeRegistration:\n  criSocket: \/var\/run\/dockershim.sock\n  imagePullPolicy: IfNotPresent\n  name: node\n  taints: null\n---\napiServer:\n  timeoutForControlPlane: 4m0s\napiVersion: kubeadm.k8s.io\/v1beta3\ncertificatesDir: \/etc\/kubernetes\/pki\nclusterName: kubernetes\ncontrollerManager: {}\ndns: {}\netcd:\n  local:\n    dataDir: \/var\/lib\/etcd\nimageRepository: registry.aliyuncs.com\/google_containers   # \u4fee\u6539\u4e3a\u963f\u91cc\u4e91\u6e90\u7ad9\nkind: ClusterConfiguration\nkubernetesVersion: 1.22.2       # \u4fee\u6539\u4e3a\u6b63\u786e\u7684\u7248\u672c\u53f7\uff0c\u539f\u6765\u662f1.22.0\nnetworking:\n  dnsDomain: cluster.local\n  podSubnet: 10.244.0.0\/16     # \u65b0\u589e\n  serviceSubnet: 10.96.0.0\/12\nscheduler: {}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u67e5\u770b\u9700\u8981\u7684\u955c\u50cf   # \u53ea\u5728master\u8282\u70b9\u64cd\u4f5c\n# kubeadm config images list --config kubeadm.yaml\nregistry.aliyuncs.com\/google_containers\/kube-apiserver:v1.22.2\nregistry.aliyuncs.com\/google_containers\/kube-controller-manager:v1.22.2\nregistry.aliyuncs.com\/google_containers\/kube-scheduler:v1.22.2\nregistry.aliyuncs.com\/google_containers\/kube-proxy:v1.22.2\nregistry.aliyuncs.com\/google_containers\/pause:3.5\nregistry.aliyuncs.com\/google_containers\/etcd:3.5.0-0\nregistry.aliyuncs.com\/google_containers\/coredns:v1.8.4\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"163\" src=\"http:\/\/www.luyouli.com\/wp-content\/uploads\/2021\/10\/1.png\" alt=\"\" class=\"wp-image-632\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">\u62c9\u53d6\u955c\u50cf\n# kubeadm config images pull --config kubeadm.yaml\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/kube-apiserver:v1.22.2\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/kube-controller-manager:v1.22.2\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/kube-scheduler:v1.22.2\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/kube-proxy:v1.22.2\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/pause:3.5\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/etcd:3.5.0-0\n[config\/images] Pulled registry.aliyuncs.com\/google_containers\/coredns:v1.8.4<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"951\" height=\"155\" src=\"https:\/\/www.luyouli.com\/wp-content\/uploads\/2021\/10\/2.png\" alt=\"\" class=\"wp-image-633\"\/><\/figure>\n<\/div>\n\n\n\n<pre class=\"wp-block-preformatted\">\u521d\u59cb\u5316\u96c6\u7fa4    # \u53ea\u5728master\u8282\u70b9\u64cd\u4f5c\n# kubeadm init --config kubeadm.yaml\n[init] Using Kubernetes version: v1.22.2\n[preflight] Running pre-flight checks\n        [WARNING Hostname]: hostname \"node\" could not be reached\n        [WARNING Hostname]: hostname \"node\": lookup node on 127.0.0.53:53: server \n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\nYour Kubernetes control-plane has initialized successfully!\n\nTo start using your cluster, you need to run the following as a regular user:\n\n  mkdir -p $HOME\/.kube\n  sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\n  sudo chown $(id -u):$(id -g) $HOME\/.kube\/config\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n# mkdir -p $HOME\/.kube\n# cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\n# chown $(id -u):$(id -g) $HOME\/.kube\/config\n# kubectl get nodes\nNAME   STATUS     ROLES                  AGE   VERSION\nnode   NotReady   control-plane,master   34m   v1.22.2\n\n\u6dfb\u52a0slave\u8282\u70b9\u5230master\u96c6\u7fa4\u4e2d   # \u5728\u4e24\u4e2aslave\u8282\u70b9\u6267\u884c\n# kubeadm join 172.19.82.170:6443 --token abcdef.0123456789abcdef \\\n        --discovery-token-ca-cert-hash sha256:7600dfe96c4aed7cf86a4d43c8ab1653b642f0xxxxxxxxxxxxxxxxxxxxx <\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># kubectl get nodes   # \u5728master\u8282\u70b9\u67e5\u770b\nNAME     STATUS     ROLES                  AGE     VERSION\nnode     NotReady   control-plane,master   39m     v1.22.2\nslave1   NotReady   &lt;none&gt;                 2m50s   v1.22.2\nslave2   NotReady   &lt;none&gt;                 113s    v1.22.2\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u5b89\u88c5flannel\u63d2\u4ef6\n# wget https:\/\/raw.githubusercontent.com\/coreos\/flannel\/master\/Documentation\/kube-flannel.yml\n# vim kube-flannel.yml\n\u5728\u4e0b\u9762\u589e\u52a0\u914d\u7f6e\uff0c\u6307\u5b9a\u5177\u4f53\u7684\u7f51\u5361\uff0c\u5c24\u5176\u662f\u5728\u591a\u7f51\u5361\u73af\u5883\uff0c\u9ed8\u8ba4\u662f\u7b2c\u4e00\u5757\u7f51\u5361\nargs:\n        - --ip-masq\n        - --kube-subnet-mgr\nresources:\n\u53d8\u4e3a\nargs:\n        - --ip-masq\n        - --kube-subnet-mgr\n        - --iface=ens3    # \u6307\u5b9a\u5177\u4f53\u7684\u7f51\u5361\nresources:\n# kubectl create -f kube-flannel.yml \n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># kubectl get nodes\nNAME     STATUS   ROLES                  AGE   VERSION\nnode     Ready    control-plane,master   63m   v1.22.2\nslave1   Ready    &lt;none&gt;                 26m   v1.22.2\nslave2   Ready    &lt;none&gt;                 25m   v1.22.2\n\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1451\" height=\"106\" src=\"https:\/\/www.luyouli.com\/wp-content\/uploads\/2021\/10\/3.png\" alt=\"\" class=\"wp-image-634\"\/><\/figure>\n\n\n\n<p>\u8fd9\u6837\u73af\u5883\u5c31OK\u4e86<\/p>\n\n\n\n<p>\u6700\u540e\u5fd8\u4e86\u4e00\u6b65\uff0c\u5f00\u542fIPVS\uff0c\u8fd9\u91cc\u8865\u4e0a<\/p>\n<\/div>\n\n\n\n<pre class=\"wp-block-preformatted\">\u5f00\u542fIPVS\n# kubectl -n kube-system get cm\nNAME                                 DATA   AGE\ncoredns                              1      15d\nextension-apiserver-authentication   6      15d\nkube-flannel-cfg                     2      15d\nkube-proxy                           2      15d\nkube-root-ca.crt                     1      15d\nkubeadm-config                       1      15d\nkubelet-config-1.22                  1      15d\n# kubectl -n kube-system edit cm kube-proxy   # \u76f4\u63a5\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\nkind: KubeProxyConfiguration\n    metricsBindAddress: \"\"\n    mode: \"\"\n    nodePortAddresses: null\n\u6539\u4e3a\nkind: KubeProxyConfiguration\n    metricsBindAddress: \"\"\n    mode: \"ipvs\"\n    nodePortAddresses: null\n# kubectl get pods -n kube-system\n# kubectl -n kube-system delete pod kube-proxy-b58gv kube-proxy-dlmns kube-proxy-z4bpq       # \u5220\u9664\u4e09\u4e2akube-proxy\n# apt install ipvsadm   # \u5b89\u88c5ipvsadm\n# ipvsadm -Ln     # \u67e5\u770bipvs\nIP Virtual Server version 1.2.1 (size=4096)\nProt LocalAddress:Port Scheduler Flags\n  -&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn\nTCP  172.17.0.1:80 rr\n  -&gt; 10.244.1.21:80               Masq    1      0          0        <\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"578\" height=\"540\" src=\"https:\/\/www.luyouli.com\/wp-content\/uploads\/2021\/11\/\u672a\u547d\u540d1636536558.jpg\" alt=\"\" class=\"wp-image-640\"\/><\/figure>\n\n\n\n<p>\u53bb\u9664Master\u8282\u70b9\u6c61\u70b9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># kubectl get nodes \r\nNAME     STATUS   ROLES                  AGE   VERSION\r\nnode     Ready    control-plane,master   16d   v1.22.3\r\nslave1   Ready    worker                 16d   v1.22.3\r\nslave2   Ready    worker                 16d   v1.22.3\r\n# kubectl describe nodes node | grep Taints\r\nTaints:             node-role.kubernetes.io\/master:NoSchedule\r\n# kubectl taint node node node-role.kubernetes.io\/master-\r\nnode\/node untainted\r\n# kubectl describe nodes node | grep Taints\r\nTaints:             &lt;none><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"214\" src=\"https:\/\/www.luyouli.com\/wp-content\/uploads\/2021\/11\/delete-taints.jpg\" alt=\"\" class=\"wp-image-643\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>\u547d\u4ee4\u8865\u5168\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># apt install bash-completion\r\n# source \/usr\/share\/bash-completion\/bash_completion\t\r\n# source &lt;(kubectl completion bash)\r\n# echo 'source &lt;(kubectl completion bash)' >>~\/.bashrc<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7531\u4e8e\u4f17\u6240\u5468\u77e5\u7684\u539f\u56e0\uff08F**K \u7ea2X\uff09\uff0cCentOS8\u7684\u751f\u547d\u5468\u671f\u5c31\u5feb\u7ed3\u675f\u4e86\uff0c\u7cfb\u7edf\u8981\u8f6c\u5165Ubuntu\u7684\u6000\u62b1\u4e86\uff0c\u4e0d\u8fc7 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,18],"tags":[],"class_list":["post-621","post","type-post","status-publish","format-standard","hentry","category-kubernetes","category-ubuntu"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"views":4781,"_links":{"self":[{"href":"https:\/\/www.luyouli.com\/index.php?rest_route=\/wp\/v2\/posts\/621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.luyouli.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.luyouli.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.luyouli.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.luyouli.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=621"}],"version-history":[{"count":17,"href":"https:\/\/www.luyouli.com\/index.php?rest_route=\/wp\/v2\/posts\/621\/revisions"}],"predecessor-version":[{"id":644,"href":"https:\/\/www.luyouli.com\/index.php?rest_route=\/wp\/v2\/posts\/621\/revisions\/644"}],"wp:attachment":[{"href":"https:\/\/www.luyouli.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.luyouli.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.luyouli.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}